BITMAPFILEHEADER、BITMAPINFOHEADER、およびビットマップの画像データを、それぞれ bf、bi、および imageData という名前の変数に格納しています。これらを .bmp ファイルに出力すると、問題なく開いて画像を表示できます。また、この bmp ファイルをインポートしてダイアログ ボックスに表示するコードを書くこともできます。
私の質問は次のとおりです。仲介者を切り取り、BITMAPFILEHEADER、BITMAPINFOHEADER、および画像データを取得し、これらのデータをダイアログ ボックスに表示される 24 ビットマップ画像に外部ファイルを使用せずに直接書き込む簡単な方法はありますか?
参考までに、ファイルに出力し、このファイルをダイアログ ボックスに入力するために現在使用しているコードを次に示します。
//fileheader
BITMAPFILEHEADER* bf = new BITMAPFILEHEADER;
bf->bfType = 0x4d42;
bf->bfSize = 6054400 + 54;
bf->bfOffBits = 54;
//infoheader
BITMAPINFOHEADER* bi = new BITMAPINFOHEADER;
bi->biSize = 40;
bi->biWidth = 2752;
bi->biHeight = -733;
bi->biPlanes = 1;
bi->biBitCount = 24;
bi->biCompression = 0;
bi->biSizeImage = 6054400;
bi->biXPelsPerMeter = 2835;
bi->biYPelsPerMeter = 2835;
bi->biClrUsed = 0;
bi->biClrImportant = 0;
//image data
unsigned char* imageData = new unsigned char[6054400];
pFrame->GetImage(imageData);
//////////////////////////////////////////////////////////////////////////
////////// Output to .bmp File ////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
std::ofstream outFile;
outFile.open("test.bmp", std::ios::binary|std::ios::out);
outFile.write(reinterpret_cast<char *>(bf), sizeof(BITMAPFILEHEADER));
outFile.write(reinterpret_cast<char *>(bi), sizeof(BITMAPINFOHEADER));
outFile.write(reinterpret_cast<char *>(imageData), 6054400);
outFile.close();
//////////////////////////////////////////////////////////////////////////
////////// input .bmp and print to dialog box /////////////////////////
//////////////////////////////////////////////////////////////////////////
CString szFilename ("C:/dev/NanoDev/TestApps/AVT_Testapp/test.bmp");
HBITMAP hBmp = (HBITMAP)::LoadImage(NULL, szFilename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
CBitmap bmp;
bmp.Attach(hBmp);
CClientDC dc(this);
CDC bmDC;
bmDC.CreateCompatibleDC(&dc);
CBitmap *pOldbmp = bmDC.SelectObject(&bmp);
BITMAP bi;
bmp.GetBitmap(&bi);
dc.BitBlt(384,26,bi.bmWidth/3,bi.bmHeight,&bmDC,0,0,SRCCOPY);
bmDC.SelectObject(pOldbmp);