关于颜色格式的一些心得
来源:互联网 发布:wifi信号增强软件 编辑:程序博客网 时间:2024/05/17 06:58
大自然中的颜色和计算机世界里的颜色,颇有许多相似之处,甚至可以说计算机世界里的颜色就是来自大自然的。我记得我的一位师长曾对我说:“科学源于生活又低于生活,艺术源于生活而高于生活”。现在想起来,似乎真的是这个样子。
大自然中的颜色有多少种呢?
不知道唉,可以说是无数种了。
不过既然科学源于生活又低于生活,那么计算机中的颜色肯定就少于无数种(作者废话,被暴打中.......)
一般我们的计算机的颜色,通常有两种格式,一种是16bit格式,一种是32bit格式。
打开显示属性面板,在“setting”里看Color quality就会发现你计算机支持的颜色格式了,我的计算机显示Medium(16 bit)和Hightest(32bit)两种,有些计算机也许还可能显示Low(8bit)吧。
关于8bit和小于8bit的颜色格式,设计到调色板问题,个人认为现在的计算机配置都很高,所以不用调色板也完全可以,所以不说了(其实自己也不知道调色板到底怎么回事)
16bit格式有两种
565 format: RRRR RGGG GGGB BBBB(从左到右,内存地址减小,和下面所说的顺序相反)
555 format: 0RRR RRGG GGGB BBBB
不同的显卡支持的格式不太一样,如果在16bit格式下编写涉及颜色的程序的话,
最好提前知道显卡支持的格式类型,免得赋值的时候出错。
我知道一种方法就是DirectDraw7里面有一个GetPixelFormat的函数,可以得到当前显卡支持的颜色格式。不过,我们通常的颜色操作都是在32bit 下进行的。
这里存在这一种24bit的格式,实际上,单纯的从颜色深度的角度讲,24bit 和32bit是一样的,只是32bit的格式比24bit多了一个阿拉法位,如果用Direct3D编写游戏,会用到这一位,一般编写2维的程序,是用不到的。而且在计算机的世界里,3可是一个很讨厌的数字,即使一个数字只需要3个字节,可实际上在内存里面,实际上也是占4个字节的。
在微软提供的开发平台VS.net环境下
经常会遇到如下几种设计到颜色的格式和宏
名称 类型 字节 定义 格式(内存中,从左到右,地址增大) COLORREF 32bit整数 4 R G B 0 RGB 宏 3 (b<<16|g<<8|r) R G B 0 RGBQUAD 结构体 4
成员变量为rgbBlue
rgbGreen , rgbRed ,
rgbReserved
B G R Re RGB_24 宏 3 (r<<16|g<<8|b) B G R 0 RGB_32 宏 4 (a<<24|r<<16|g<<8|b) B G R A
可以看出,虽然都是表示颜色的值,但是在内存里存储的方式确实不一样的,
我上面所列出的格式,是按照内存地址从小到大的顺序列出的,
以RGB_32为例,其中 B分量的所在字节的地址值是最小的,而A分量的字节的地址值比B分量的地址大3个值,上面所列出的值大致分为两大阵营,前两个是一个阵营,后三个是一个阵营,因为他们在内存里的存储顺序的不同,所以如果用的地方不对,就会出错。
就我的经验来看,如果用CDC编写程序,用第一阵营的两个颜色表达方式,如果用DirectDraw编写程序,用RGB_24这种格式,比如
buffer 这种锁定操作,直接赋RGB_24就非常的方便了,你如果赋的是RGB,那么除非把 r,g,b的顺序颠倒一下,否则,得到的颜色,肯定不是你想要的(rgb三个分量相等除外)
如果用Direct3D编程,那么也许RGB_32是个不错的选择,不过我还没用过
如果对一个bmp文件(现在大多数的bmp都是24bit的)进行读取操作,那么我建议用
RGBQUAD,因为它是一个结构体,可以直接把每一个字节的值赋给相应分量的值,使用起来很方便的
另外在这罗嗦一句,关于24- bit bmp文件的颜色存储格式,如果你已经把文件的所以数据读到内存里面了,
那么,每一个象素点,在内存中的存储格式为 b g r
有人会问了,那么这岂不是只有3个字节么?不是和上面所说的矛盾了?
其实这些点在内存中是连续存储的,实际的格式是 b g r b g r ........
如果一个bmp文件的象素大小是nWidth*nHeight的话,
那么象素矩阵实际上占的字节数是:(((nWidth+31)>>4)<<4)*nHeight
所以,无论象素大小是多少,所占内存的大小始终是16的倍数的
当然,我这么说可能对于初学者还是不太明白,到底bmp是怎样一种格式,你可以在百度上搜索一下
会有很多收获的。
水平有限,如有不妥之处,请达人不吝赐教。
- 关于颜色格式的一些心得
- 关于QT的一些心得
- 关于一些activex的心得
- 关于RTX51tny的一些心得
- 关于HoG的一些心得
- 关于前端的一些心得
- 关于nfs的一些心得
- 关于uploadify的一些心得
- 关于STM32的一些心得
- 关于项目的一些心得
- 一些关于vue的心得
- 关于最近研究XmlHttp的一些心得
- 一些关于处理感情生活的心得
- 近期关于EMACS的一些心得
- 一些关于Liferay的使用心得
- 关于共享内存的一些心得
- 一些关于Liferay的使用心得
- 关于Java的一些学习方法心得
- 图片的漫游
- Java分词
- 明明白白XP系统环境变量
- kettle使用中连接db2数据库问题和解决办法
- PKU 1003 Hangover
- 关于颜色格式的一些心得
- 数据库设计方法、规范和技巧
- 客户端访问SQL Server 2000
- Oracle认证:何时使用绑定变量性能反而差
- 2级考前讲座(考前准备必看)
- 日语二级能力考试单词记忆的方法
- Websphere安装配置
- “当代男人泡妞初级教程”写给男人,男人应该看,女人更应该看
- forward与redirect转发的区别