IJGを用いてJPEGからHBMPの取得。画像表示するには?


薬剤師α  2004-06-23 19:32:43  No: 53833

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サイズは取得しており、そのサイズが表示されるのですが、画像が表示されず真っ黒になります。


瀬戸っぷ  2004-06-25 22:42:46  No: 53834

後かたづけが期待できそうもないので、お掃除(?)。

http://www.mtakahashi.com/cgi.cgi?11504
にて解決したようです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加