在Windows中,RGBTRIPLE和RGBQUAD结构以相反的顺序定义。 这是违反直觉的,我想这一定是故意的。 当然,这并不重要,但这已经给我带来了很多麻烦,所以我觉得值得一提。 所以为什么?
定义:
typedef struct tagRGBTRIPLE { BYTE rgbtBlue; BYTE rgbtGreen; BYTE rgbtRed; } RGBTRIPLE,*PRGBTRIPLE,NEAR *NPRGBTRIPLE,FAR *LPRGBTRIPLE; typedef struct tagRGBQUAD { BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; } RGBQUAD;
使用Windows监视器configurationfunction时发生I2C错误
Nodejs OLE-COM服务器
如何可靠地检查一个Windows进程是否是C ++中的另一个父进程?
什么是在Windows中实现沉重的graphics的最合适的方法?
将django manage.py输出(在Windows中)redirect到一个文本文件
在另一个程序/脚本中实时使用Sysinternals Process Monitor的输出
在Windows上os.stat()
删除其他用户userfolder作为pipe理员结果拒绝访问
为什么“你想让这个应用程序对Windows上的设备进行更改”
颜色顺序存储本质上没有什么特别的意义:你可以以任何顺序存储组件,重要的是只要同意选择哪个顺序。
尽管如此,这些结构的BGR格式与用于DIB的组件顺序相匹配(至少在小端机上 – 但所有的DIB格式都是用LE设计的),所以如果你在内存中有一个24位的DIB,使用RGBTRIPLE结构读取其颜色数据,并使用指针算法“移动”它; 但是,对于32位DIB和RGBQUAD (“保留”字节应该是第一个成员)。
RGBQUAD结构被用于DIB的调色板; 填充字节几乎肯定是出于性能的原因,允许直接使用从文件中读取的调色板数据作为颜色的查找表,将它们保持在DWORD边界上。
那么,为什么选择DIB的BGR订单呢? 我认为在DIB设计的时候它有一些性能上的优势(我们正在谈论OS / 2的演示管理器,〜1988),可能从大多数显卡的DIB到内存格式的转换是比较便宜的这条路。
编辑
好吧,这个命令是来自OS / 2 Presentation Manager的剩余命令, 这一点在这篇1992年的KB文章中得到了证实,
红色,绿色和蓝色字节与Windows约定相反(红色与蓝色交换位置)。 这是Presentation Manager兼容性的另一个剩余部分。
(顺便说一句,我在DIB中OS / 2 PM最讨厌的剩余行数是来自OS / 2 PM中使用的默认坐标系的行的相反顺序)
在一个小型机器(又名x86和朋友)上,结构与Bitmap的颜色数据的数据格式完全匹配。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。