文章图片
有一些问题 , 可能你一直都没时间真正去搞懂 , 今天的主题就算其中一个 。
在Windows中 , 很多和位图相关的结构体中 , 会有一个所谓的”planes”的成员 。 举个例子 , 在BITMAPINFOHEADER这个结构体中有一个biPlanes的成员 , 而且它还必须设置为1 。 在BITMAP结构体中有一个bmPlanes成员 。 那么 , 这东西 , 到底有啥用呢?
请听在下给翻译翻译 。
EGA(Enhanced Graphics Adapter , 算老古董啦)显卡驱动支持16位色 。 和只能支持4个颜色的CGA(Color Graphics Adapter , 算老老古董啦)相比 , 这可是一个巨大的进步(那可不) 。
如果系统支持16色的颜色空间 , 则每个像素需要4个位来表示 。 你可能会认为 , 将显卡内存的每个字节表示为两个像素 , 一个在视频区底部的四位 , 另一个则是顶部的四位 。 但由于技术原因 , 显存的结构并没有那么简单 。
在实际的设计中 , 像素的位数据并不是一个接一个的摆放的 , 颜色通道被拆分为各自独立的单色位图 。 换句话说 , 像素被以”另外一种方式”切片 。 如下图所示:
在上图中 , 假设我们希望显示8个像素 , 它们的颜色值分别为 {0 3 5 6 8 B D E 。
显卡内存并不是按该顺序存储半个字节 , 而是将半字节分成它们的组成位 , 并将相同位置的所有位集合在一起 。换句话说 , 采用横向读取而不是向下读取 。
在一个默认的16色的调色板中 , 颜色被系统按照一定的规则进行分配 , 例如位0表示蓝色通道 , 位1表示绿色通道 , 位2表示红色通道 , 位4表示强度通道 。 根据这个规则 , 这4个位可以被解释为:强度平面 , 红色平面 , 绿色平面和蓝色平面 。 对于最后三个平面 , 您可以想象每个平面都代表了如果只有相应的电子枪在发射时你看到的情况 。
由于这是EGA的本机颜色格式 , 因此需要有一种方法在BITMAP结构中表达这种颜色格式 , 以便 Windows可以表示与设备相关的位图 。
因此诞生了平面颜色格式 。 对于16色平面的位图 , 平面数为 4 , 每个像素的位数为 1 。
总结对于现代16位色/32位色的显示系统来说 , 不用太过担心 , 因为始终只会有一个颜色平面 , 所以简单地设置它为 1 就可以了 。
所以 , 且把它看做一个”兼容性存在”即可 。
最后Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一 , 里面有很多关于Windows的小知识 , 对于广大Windows平台开发者来说 , 确实十分有帮助 。
本文来自:《What is the purpose of the bmPlanes member of the BITMAP structure?》
【javascript|关于BITMAP位图结构体中的颜色平面的理解】
- 5G|关于5G,华为赢了
- 短信|关于5G消息,中国移动取得新进展,微信该做准备了
- javascript|Web前端培训:什么是 MEAN Stack?
- 济宁市公安局兖州分局关于开展冬春季严打整治百日行动的通告
- 5G|真相大白了,关于放弃华为5G,英国说出了真相
- javascript|奢侈品级别音响B&W加持,峰米向行业第一发起冲击?
- 关于开展“迎新春”爱国卫生专项活动助力常态化疫情防控的通知
- javascript|帕特·基辛格被任命为英特尔CEO已有一年
- 安卓|关于安卓淘汰32位应用,你关心的问题都在这了
- javascript|SSD、显卡速度再翻倍! 新一代PCIe 6.0标准正式定案