如何将BITMAPV5HEADER与CreateDIBitmap功能一起使用
How to use BITMAPV5HEADER with CreateDIBitmap function
我正在尝试使用BITMAPV5HEADER
来创建具有alpha通道的位图:
BITMAPV5HEADER bi;
bi.bV5Size = sizeof(BITMAPV5HEADER);
bi.bV5Width = width;
bi.bV5Height = -height;
bi.bV5Planes = 1;
bi.bV5BitCount = 32;
bi.bV5Compression = BI_RGB;
bi.bV5SizeImage = 0;
bi.bV5XPelsPerMeter = 0;
bi.bV5YPelsPerMeter = 0;
bi.bV5ClrUsed = 0;
bi.bV5ClrImportant = 0;
bi.bV5AlphaMask = 0x000000FF;
bi.bV5RedMask = 0x0000FF00;
bi.bV5GreenMask = 0x00FF0000;
bi.bV5BlueMask = 0xFF000000;
bi.bV5CSType = LCS_sRGB;
bi.bV5Endpoints = CIEXYZTRIPLE();
bi.bV5GammaRed = 0;
bi.bV5GammaGreen = 0;
bi.bV5GammaBlue = 0;
bi.bV5Intent = LCS_GM_IMAGES;
bi.bV5ProfileData = 0;
bi.bV5ProfileSize = 0;
bi.bV5Reserved = 0;
*hBmp = CreateDIBitmap(hdc, (BITMAPINFOHEADER *) &bi, CBM_INIT, data, (BITMAPINFO *)&bi, DIB_RGB_COLORS);
但我不确定类型转换是否正确。CreateDIBitmap()
文档不清楚,因为在字段定义中它说:
Inconst BITMAPINFOHEADER *lpbmih,
并在描述中:
lpbmih [in]
指向位图信息标头结构的指针,BITMAPV5HEADER。
是的,类型转换很好。
BITMAPV5HEADER
文档指出:
BITMAPV5HEADER
结构是位图信息头文件。它是BITMAPINFOHEADER
结构的扩展版本。
BITMAPV5HEADER
的前 11 个字段与BITMAPINFOHEADER
中的字段匹配。 因此,可以安全地将类型转换的BITMAPV5HEADER*
指针传递到需要BITMAPINFOHEADER*
指针的lpbmih
参数。
另一方面,lpbmi
参数是另一回事。 它期待一个BITMAPINFO*
指针,但你给它一个类型转换的BITMAPV5HEADER*
指针。 从技术上讲,BITMAPV5HEADER
不是BITMAPINFO
的扩展,所以你应该传入一个单独的BITMAPINFO
变量而不是你的BITMAPV5HEADER
变量。
但是,BITMAPINFO
以BITMAPINFOHEADER
开头,因此BITMAPV5HEADER
的前 11 个字段将满足BITMAPINFO::bmiHeader
字段。 并且您将标题的biBitCount
字段设置为 32,biCompression
字段设置为BI_RGB
,因此没有使用颜色表,因此CreateDIBitmap()
不会尝试访问BITMAPINFO::bmiColors
字段并最终将BITMAPV5HEADER
的 alpha/gamma 字段读取为 RGB 值。 因此,在此特定配置中,将类型转换的BITMAPV5HEADER*
指针传递给需要BITMAPINFO*
指针的lpbmi
参数也是"安全的"。
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 当直接分配时,为什么此功能指针分配起作用,而不是与有条件的操作员一起使用
- pcap_dump功能在与pcap_loop一起使用时不会被调用,pcap_dispatch始终返回 0
- 如何将BITMAPV5HEADER与CreateDIBitmap功能一起使用
- 将打开的CV的重映射功能与类型CV_8SC1的源图像一起使用
- 如何使此功能与 FILE 一起使用?C++
- 删除功能误差的C 与有条件的iniaization一起使用
- 重新分配指针后,将类功能与指针一起使用
- GCC vs Clang:将功能与-FPIC一起插入
- C 与查找功能一起使用时,迭代器为什么行为会有所不同
- 当与可能导致缓冲区溢出的功能一起使用时,外部变量是否比其他变量更大
- 如何声明 IP 地址以将其与多种功能一起使用
- 如何将QProgressDialog与QDomDocument保存功能一起使用
- 如何将unordered_set与比较功能一起使用
- 如何使枚举类与'bit-or'功能一起使用?
- 使用_GLIBCXX_CXX11_ABI将5.1版以前的C++ABI与C++11/14功能一起使用有什么意义
- 是否可以将STL复制功能与地图一起使用
- 如何将 Doxygen 的 "Documentation at other places" 功能与专门的模板类一起使用?