C++ Builderにおける画像データの取得について
C++での画像処理プログラムの研究をしている者です。
文字数制限がありますので簡潔になりますがよろしくお願いします。
担当教官から基本となるプログラムをいただいたのですが実行するとエラーが出てしまいます。
プログラム内容:
void TImg::ImgMemToBmp(Graphics::TBitmap *bmp, BYTE *img)
{
GetBmpHdr(); // ビットマップヘッダー取得
String fileName = StartDir + "\\tmp.bmp";
FILE *fp;if (NULL == (fp = fopen(fileName.c_str(), "wb"))) return;
fwrite(BmpHeader, 54, 1, fp); // ヘッダー
//******** 画像書き込み ********
BYTE *p, *img1 = (BYTE *)malloc(Pixel_X_Max*3);
for (int y=0; y<Pixel_Y_Max; y++) {
p = img + (Pixel_Y_Max-y-1) * Pixel_X_Max;
for (int x=0; x<Pixel_X_Max; x++) {
*(img1+3*x) = *(img1+3*x+1) = *(img1+3*x+2) = *(p+x);
}
fwrite(img1, Pixel_X_Max*3, 1, fp);
}
fclose(fp);
bmp->LoadFromFile(fileName); // BMPファイル読み込み
DeleteFile(fileName); free(img1); // 不要ファイル、メモリ削除
}
問題点:下から3行目の
bmp->LoadFromFile(fileName);
でクラスの例外が発生しました。"ビットマップが不正です"とのエラーが出ます。
私なりにプログラムを解析してみたところ
で、tmp.bmpというファイルを作りそこに白黒画素値を書き込んでいるように思うのですが
途中で止めてtmp.bmpのサイズを確認してみたところ
原画像が640×480の画像でtmp.bmpのサイズは20971840×15728640となっていました。
これが原因でエラーと出たのではないかと考えたのですがいかがでしょうか?
補足要求していただければ、適宜補足いたしますので
どうかご助力をよろしくお願いいたします。
補足
画像ですが、ブラウザのURLに直接ペーストしてください。 クリックしても見られませんので。 お手数ですが、すみません。