首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >24 BGR的winapi - CreateDIBitmap是BGR而不是RGB。

24 BGR的winapi - CreateDIBitmap是BGR而不是RGB。
EN

Stack Overflow用户
提问于 2015-03-09 09:17:16
回答 1查看 955关注 0票数 5

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

创建位图的代码如下:

代码语言:javascript
复制
 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)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-09 09:31:24

用于DIB位图的Windows约定是BGR。你改变不了这一点。你只需适应它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28938459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档