JPEG画像からビットマップハンドルを取得し、そのハンドルを用いて画像を表示させるものを作ろうと思ったのですが、うまくいきません。
良いアドバイスがあればよろしくお願いいたします。
開発環境は、Windows2000/VC++6.0です。
IJGライブラリを用いて下記のようにビットマップハンドルを取得しました。
===================================================================
image.err = jpeg_std_error(&jerr);
fp = fopen( FileName,"rb") // JPEGファイルオープン
jpeg_create_decompress(&image);
jpeg_stdio_src(&image,fp);
jpeg_read_header(&image,TRUE);
jpeg_start_decompress(&image);
bmi.biSize = sizeof(BITMAPINFOHEADER);
bmi.biWidth = image.image_width;
bmi.biHeight = image.image_height;
bmi.biPlanes = 1;
bmi.biBitCount = 24;
bmi.biCompression = BI_RGB;
bmi.biXPelsPerMeter = 0;
bmi.biYPelsPerMeter = 0;
bmi.biClrUsed = 0;
bmi.biClrImportant = 0;
bmi.biSizeImage = 0;
hBitmap = CreateDIBSection(0, (BITMAPINFO *)&bmi,
DIB_RGB_COLORS, (VOID **)&pV, NULL, 0);
===================================================================
上記で取得したビットマップハンドル(hBitmap)を用いて以下のように表示しようとしました。
===================================================================
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
GetObject(hBitmap, sizeof(BITMAP), &bmp_info);
wx = bmp_info.bmWidth;
wy = bmp_info.bmHeight;
GetWindowRect(hWnd, &rc);
hdc_mem = CreateCompatibleDC(hdc);
SelectObject(hdc_mem, hBitmap);
BitBlt(hdc,0, 0, wx, wy, hdc_mem, 0, 0, SRCCOPY);
DeleteDC(hdc_mem);
DeleteObject(GhBitmap);
EndPaint(hWnd, &ps);
break;
===================================================================
こうして実行すると、元JPEG画像のWHサイズは取得しており、そのサイズが表示されるのですが、画像が表示されず真っ黒になります。
後かたづけが期待できそうもないので、お掃除(?)。
http://www.mtakahashi.com/cgi.cgi?11504
にて解決したようです。
ツイート | ![]() |