microSD カードのビットマップ・ファイルのビュアー.画像の最大値 縦:272ピクセル,横:480ピクセル. Bitmap file viewer for microSD card. Maximum size Vertical: 272 pixels, Horizontal: 480.
Dependencies: SDFileSystem_Warning_Fixed F746_GUI
MyFiles/BitmapReader.cpp@1:bb146d5fe9aa, 2018-10-23 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Tue Oct 23 11:51:47 2018 +0000
- Revision:
- 1:bb146d5fe9aa
2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 1:bb146d5fe9aa | 1 | //----------------------------------------------------------- |
MikamiUitOpen | 1:bb146d5fe9aa | 2 | // SD_BitmapReader クラス(ヘッダ) |
MikamiUitOpen | 1:bb146d5fe9aa | 3 | // SD カードの *.bmp ファイルの内容を読み出す |
MikamiUitOpen | 1:bb146d5fe9aa | 4 | // ファイルの画素数の最大値:480×272 ピクセル |
MikamiUitOpen | 1:bb146d5fe9aa | 5 | // だだし,ファイル名が日本語のものが除く |
MikamiUitOpen | 1:bb146d5fe9aa | 6 | // |
MikamiUitOpen | 1:bb146d5fe9aa | 7 | // 2018/10/23, Copyright (c) 2018 MIKAMI, Naoki |
MikamiUitOpen | 1:bb146d5fe9aa | 8 | //----------------------------------------------------------- |
MikamiUitOpen | 1:bb146d5fe9aa | 9 | |
MikamiUitOpen | 1:bb146d5fe9aa | 10 | #include "BitmapReader.hpp" |
MikamiUitOpen | 1:bb146d5fe9aa | 11 | |
MikamiUitOpen | 1:bb146d5fe9aa | 12 | namespace Mikami |
MikamiUitOpen | 1:bb146d5fe9aa | 13 | { |
MikamiUitOpen | 1:bb146d5fe9aa | 14 | SD_BitmapReader::~SD_BitmapReader() |
MikamiUitOpen | 1:bb146d5fe9aa | 15 | { |
MikamiUitOpen | 1:bb146d5fe9aa | 16 | sd_->unmount(); |
MikamiUitOpen | 1:bb146d5fe9aa | 17 | delete sd_; |
MikamiUitOpen | 1:bb146d5fe9aa | 18 | } |
MikamiUitOpen | 1:bb146d5fe9aa | 19 | |
MikamiUitOpen | 1:bb146d5fe9aa | 20 | bool SD_BitmapReader::Open(const string fileName) |
MikamiUitOpen | 1:bb146d5fe9aa | 21 | { |
MikamiUitOpen | 1:bb146d5fe9aa | 22 | // シフト JIS のコードがあれば false を返す |
MikamiUitOpen | 1:bb146d5fe9aa | 23 | for (int n=0; n<fileName.size(); n++) |
MikamiUitOpen | 1:bb146d5fe9aa | 24 | { |
MikamiUitOpen | 1:bb146d5fe9aa | 25 | uint8_t c = fileName[n]; |
MikamiUitOpen | 1:bb146d5fe9aa | 26 | if (((c>=0x81) && (c<=0x9f)) || ((c>=0xe0) && (c<=0xfc))) |
MikamiUitOpen | 1:bb146d5fe9aa | 27 | return false; |
MikamiUitOpen | 1:bb146d5fe9aa | 28 | } |
MikamiUitOpen | 1:bb146d5fe9aa | 29 | |
MikamiUitOpen | 1:bb146d5fe9aa | 30 | string name = (string)"/" + STR_ + "/" + fileName; |
MikamiUitOpen | 1:bb146d5fe9aa | 31 | fp_ = fopen(name.c_str(), "rb"); |
MikamiUitOpen | 1:bb146d5fe9aa | 32 | if (fp_ == NULL) ErrorMsg("open error!!"); |
MikamiUitOpen | 1:bb146d5fe9aa | 33 | |
MikamiUitOpen | 1:bb146d5fe9aa | 34 | return true; |
MikamiUitOpen | 1:bb146d5fe9aa | 35 | } |
MikamiUitOpen | 1:bb146d5fe9aa | 36 | |
MikamiUitOpen | 1:bb146d5fe9aa | 37 | // 条件に合うビットマップ・ファイルかどうか調べる |
MikamiUitOpen | 1:bb146d5fe9aa | 38 | // 戻り値:条件に合うビットマップ・ファイルの場合 true |
MikamiUitOpen | 1:bb146d5fe9aa | 39 | bool SD_BitmapReader::IsAllowed() |
MikamiUitOpen | 1:bb146d5fe9aa | 40 | { |
MikamiUitOpen | 1:bb146d5fe9aa | 41 | uint8_t data[54]; // Windows のピットマップ・ファイルのヘッダは 54 ビットに固定 |
MikamiUitOpen | 1:bb146d5fe9aa | 42 | fread(data, 1, 54, fp_); // 54 バイト分を読み込む |
MikamiUitOpen | 1:bb146d5fe9aa | 43 | |
MikamiUitOpen | 1:bb146d5fe9aa | 44 | // ファイルタイプを調べる |
MikamiUitOpen | 1:bb146d5fe9aa | 45 | if ((data[0] != 'B') || (data[1] != 'M')) return false; |
MikamiUitOpen | 1:bb146d5fe9aa | 46 | |
MikamiUitOpen | 1:bb146d5fe9aa | 47 | // 画像の幅が許される最大のピクセル数を超えていないか調べる |
MikamiUitOpen | 1:bb146d5fe9aa | 48 | if (*(uint32_t *)(data+18) > maxWidth_) return false; |
MikamiUitOpen | 1:bb146d5fe9aa | 49 | |
MikamiUitOpen | 1:bb146d5fe9aa | 50 | // 画像の高さが許される最大のピクセル数を超えていないか調べる |
MikamiUitOpen | 1:bb146d5fe9aa | 51 | if (*(uint32_t *)(data+22) > maxHeight_) return false; |
MikamiUitOpen | 1:bb146d5fe9aa | 52 | |
MikamiUitOpen | 1:bb146d5fe9aa | 53 | return true; |
MikamiUitOpen | 1:bb146d5fe9aa | 54 | } |
MikamiUitOpen | 1:bb146d5fe9aa | 55 | } |
MikamiUitOpen | 1:bb146d5fe9aa | 56 |