【问题标题】:winapi - CreateDIBitmap in 24bpp is in BGR not RGBwinapi - 24bpp 中的 CreateDIBitmap 是 BGR 而不是 RGB
【发布时间】:2023-03-05 12:56:01
【问题描述】:

我正在尝试从包含像素颜色值的数组创建 HBITMAP。问题是当我尝试创建 24-bpp 位图时,CreateDIBItmap 正在使用 BGR 值而不是 RGB,正如我所愿。

创建Bitmap的代码如下:

 image_size = 600 * 600 * 3;
 aimp_buffer = (char *)malloc(image_size * sizeof(char));
 for (counter = 0; counter < image_size;)
 {
     aimp_buffer[counter++] = 255;
     aimp_buffer[counter++] = 0;
     aimp_buffer[counter++] = 0;
 }

 ads_scrbuf->avo_buffer = (void *)aimp_buffer;
 ads_scrbuf->im_height = 600;
 ads_scrbuf->im_width = 600;
 ads_scrbuf->im_scanline = 600;

 memset(&info, 0, sizeof(info));
 memset(&info.bmiHeader, 0, sizeof(info.bmiHeader));
 info.bmiHeader.biBitCount = 24;
 info.bmiHeader.biHeight= -600;
 info.bmiHeader.biWidth= 600;
 info.bmiHeader.biSize = sizeof(info.bmiHeader);
 info.bmiHeader.biPlanes = 1;
 info.bmiHeader.biCompression = BI_RGB;

 memset(&header, 0, sizeof(BITMAPV5HEADER));
 header.bV5Width = 600;
 header.bV5Height = 600;
 header.bV5BitCount = 24;
 header.bV5Size = sizeof(BITMAPV5HEADER);
 header.bV5Planes = 1;
 header.bV5Compression = BI_RGB;

 *adsp_hBitmap = CreateDIBitmap(GetDC(ds_apiwindow), (BITMAPINFOHEADER *)&header, 
     CBM_INIT, (void *)ads_scrbuf->avo_buffer, &info, DIB_RGB_COLORS)

这应该为所有图像创建一个红色背景,但它是蓝色的。

【问题讨论】:

  • 对不起,我忘记了一些代码,因为我没有在这里发布所有代码

标签: c winapi rgb bitmapimage bgr


【解决方案1】:

DIB 位图的 Windows 约定是 BGR。你无法改变这一点。你只需要适应它。

【讨论】:

    猜你喜欢
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2015-08-28
    • 1970-01-01
    • 2015-08-15
    • 2021-10-27
    相关资源
    最近更新 更多