Я пишу приложение для Win32, которое отображает изображения в формате JPEG из базы данных.Я выбрал libjpeg в качестве декодера, но большинство изображений отображаются неправильно.Это можно исправить, увеличив или уменьшив ширину изображения на единицу, однако изображения, которые были правильно отображены до неправильного отображения после этого исправления.Вот часть моего кода (исключая преобразование из RGB в BGR):
int JpegToRaw(BYTE *input, int insize, BYTE *output, int &width, int &height)
{
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
jpeg_mem_src(&cinfo, input, insize);
jpeg_read_header(&cinfo, TRUE);
jpeg_start_decompress(&cinfo);
//--cinfo.output_width; or ++cinfo.output_width;
int row_stride = cinfo.output_width * 3;
int outsize = row_stride * cinfo.output_height;
output = (BYTE *)malloc(outsize * sizeof(BYTE));
BYTE *pos = output;
while (cinfo.output_scanline < cinfo.output_height)
{
jpeg_read_scanlines(&cinfo, &pos, 1);
pos += row_stride;
}
width = cinfo.output_width;
height = cinfo.output_height;
jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
return outsize;
}
HBITMAP RawToBitmap(BYTE *input, int size, int width, int height)
{
BITMAPINFO bi;
bi.bmiHeader.biSize = sizeof(bi24BitInfo.bmiHeader);
bi.bmiHeader.biWidth = width;
bi.bmiHeader.biHeight = -height;
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, size, input);
return hBitmap;
}
Я уверен, что передаю допустимые массивы jpeg в JpegToRaw()
, но не знаю, почему изображения отображаются по-разному.Может ли кто-нибудь помочь мне получить это?