Здравствуйте. Нужно загрузить картинку JPEG. Использую библиотеку LibJpeg и компилятор MinGW x32.
| Код | HBITMAP hBmp; //глобальная переменная
HBITMAP LoadJPEG(char* FileName){ unsigned long x, y; unsigned long data_size; unsigned char* rowptr[1]; unsigned char* jdata; jpeg_decompress_struct info; jpeg_error_mgr err;
FILE* file = fopen(FileName, "rb");
info.err = jpeg_std_error(&err); jpeg_create_decompress(&info);
if (!file) { fprintf(stderr, "Error reading JPEG file %s!", FileName); return 0; }
jpeg_stdio_src(&info, file); jpeg_read_header(&info, TRUE);
jpeg_start_decompress(&info);
x = info.output_width; y = info.output_height;
data_size = x * y * 3;
jdata = (unsigned char*)malloc(data_size); while (info.output_scanline < info.output_height){ rowptr[0] = (unsigned char*)jdata + (info.output_width * info.output_scanline * 3); jpeg_read_scanlines(&info, rowptr, 1); }
jpeg_finish_decompress(&info); jpeg_destroy_decompress(&info);
fclose(file);
BITMAPINFO bi; ZeroMemory(&bi, sizeof(BITMAPINFO)); bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bi.bmiHeader.biWidth = x; bi.bmiHeader.biHeight = y; bi.bmiHeader.biPlanes = 1; bi.bmiHeader.biBitCount = 24; bi.bmiHeader.biCompression = BI_RGB;
HBITMAP hBitmap = CreateDIBSection(NULL, &bi, DIB_RGB_COLORS, NULL, NULL, 0); SetBitmapBits(hBitmap, data_size, jdata); free(jdata);
return hBitmap; }
|
оконная процедура:
| Код | case WM_PAINT:{ PAINTSTRUCT ps; BeginPaint(wnd, &ps); if (hBmp){ HDC dc = CreateCompatibleDC(dcPanelRender); SelectObject(dc, hBmp); BITMAP bm; GetObject(hBmp, sizeof(BITMAP), &bm); BitBlt(dcPanelRender, 0,0, bm.bmWidth, bm.bmHeight, dc, 0,0, SRCCOPY); DeleteDC(dc); } EndPaint(wnd, &ps); break; }
case WM_CREATE: hPanelRender = CreateWindow("Static", NULL, WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_NOTIFY, 0, 0, 0, 0, wnd, NULL, myInstance, NULL); dcPanelRender = GetDC(hPanelRender); hBmp = LoadJPEG((char*)"ozawa.jpeg"); if (!hBmp){ MessageBox(0, NULL, NULL, 0); } break;
|
картинка грузится, но получается как у Джеймса Кэмерона в 2009-ом https://fastpic.ru/view/111/2019/1128/bfe634361490b3de0666f2c5b34a440b.jpg.html
Как это исправить? |