microSD カードのビットマップ・ファイルのビュアー.画像の最大値 縦:272ピクセル,横:480ピクセル. Bitmap file viewer for microSD card. Maximum size Vertical: 272 pixels, Horizontal: 480.

Dependencies:   SDFileSystem_Warning_Fixed F746_GUI

Committer:
MikamiUitOpen
Date:
Tue Oct 23 11:51:47 2018 +0000
Revision:
1:bb146d5fe9aa
2

Who changed what in which revision?

UserRevisionLine numberNew 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