2011-10-20 19 views
0

メモリからビットマップ(メモリに格納されている必要なヘッダーがすべて正しく作成されている)をロードし、HBITMAPをそのメモリに関連付けるにはどうすればよいですか?メモリからWindows GDIビットマップを作成する

+0

可能重複(http://stackoverflow.com/questions/2886831/win32-cc-load-image-from-memory-buffer) –

答えて

0

あなたがそのようにように....それにあなたのビットをコピーして、新しいバッファを作成するCreateDIBSectionを使用する必要があります:[メモリ・バッファからWin32のC/C++のロードイメージ]の

std::ifstream is; 
is.open("Image.bmp", std::ios::binary); 
is.seekg (0, std::ios::end); 
length = is.tellg(); 
is.seekg (0, std::ios::beg); 
pBuffer = new char [length]; 
is.read (pBuffer,length); 
is.close(); 

tagBITMAPFILEHEADER bfh = *(tagBITMAPFILEHEADER*)pBuffer; 
tagBITMAPINFOHEADER bih = *(tagBITMAPINFOHEADER*)(pBuffer+sizeof(tagBITMAPFILEHEADER)); 
RGBQUAD    rgb = *(RGBQUAD*)(pBuffer+sizeof(tagBITMAPFILEHEADER)+sizeof(tagBITMAPINFOHEADER)); 

BITMAPINFO bi; 
bi.bmiColors[0] = rgb; 
bi.bmiHeader = bih; 

char* pPixels = (pBuffer+bfh.bfOffBits); 

char* ppvBits; 

hBitmap = CreateDIBSection(NULL, &bi, DIB_RGB_COLORS, (void**) &ppvBits, NULL, 0); 
SetDIBits(NULL, hBitmap, 0, bih.biHeight, pPixels, &bi, DIB_RGB_COLORS); 

GetObject(hBitmap, sizeof(BITMAP), &cBitmap); 
+0

bi.bmiColors [0] = rgbで正しくないものがあります。 BITMAPINFO構造体には、1ピクセルあたりのビット数に応じて、bmiColorsの0〜256エントリが必要な場合があります。 –

+2

あなたは答えをコピーしたBrunoを少なくとも信用すべきです。 http://stackoverflow.com/questions/2886831/win32-cc-load-image-from-memory-buffer –

+0

確かに、それを行う "公式の"方法はありますか?...または彼を信じて元のポストソーサーのものにリンクしていますか? – redec

関連する問題