颜色基本概念和颜色位移
来源:互联网 发布:淘宝宝贝降权 编辑:程序博客网 时间:2024/05/16 14:05
颜色的基本概念:RGB中0x000000是黑色,0xffffff是白色; Alpha当0x00时候是完全透明的,0xff是完全不透明的。
颜色的深度,就是一个像素用多少位来表示,一般图像为8位深度,也就是2(^8) = 256种颜色。如果图像深度为24位,那就是2(^24)=
16777216种颜色称之为真彩色。虽然颜色的深度为8位,但是也不是说R只有8种,G只有8种,B只有4种颜色,也不是说R只能取0x00~0x07,而是将这256种常用颜色赋值给一个unsigned int类型的整数(alpha位也是必须的),R位可能是0x00~0xff,所以到内存里面还是要消耗一个unsigned int的整型来存放一个像素颜色,而颜色的深度只能在磁盘空间或者网络存储中减少存储空间。
颜色在内存中用调色板,可以有效的减少内存中的占用,比如用一个unsigned char来表示一个颜色索引,索引到调色板。
颜色在内存中用调色板,可以有效的减少内存中的占用,比如用一个unsigned char来表示一个颜色索引,索引到调色板。
颜色位移的例子:
uint32_t Color::to_ARGB32() const {
uint32_t c=(uint8_t)(a*255); // 例如0x0000007F
c<<=8; //0x00007F00
c|=(uint8_t)(r*255); //0x00007F10
c<<=8; //0x007F1000
c|=(uint8_t)(g*255); //0x007F1011
c<<=8; //0x7F101100
c|=(uint8_t)(b*255); //0x7F101112
unsigned char red = (unsigned char)(color >> 16);
int nRed = (int)red; // 输出16
return c; //0x7F101112
}
// 总结:
// 1. C/C++语言的位移运算不需要考虑内存存放的大小端,因为这个是对逻辑上十六进制数值的位移, 直接16进制左右移动即可。
// 2.小转大,大左移<<填充:类型的转换,将小类型转换为大类型,只需要声明一块大数据类型的空间,然后左移填充各个小的数据类型。
// 3.大转小,大右移>>截取:大的转换为小的先右移,然后直接强制类型转换截取,或者格式截取。
左右移动只是数值上的操作,ARGB颜色格式在内存中数值就是一个unsigned int整型:ARGB;存储方式在内存中的由底地址到高地址为:BGRA的字节顺序。
左右移动只是改变大数据的值,地址并不改变。输出是<<,输入是>>。
// 4. 网络上的数据,需要先转换为主机字节顺序,然后对主机数据进行16进制处理。
0 0
- 颜色基本概念和颜色位移
- CSS基本概念和颜色
- OGL颜色和图片颜色存储位移压缩
- 颜色和颜色不是同样的颜色
- 颜色大全 颜色名称和颜色值
- 颜色!!!!!!!!
- 颜色
- 颜色
- 颜色
- 颜色
- 颜色
- 颜色
- 颜色
- 颜色
- 颜色
- 颜色
- 颜色
- 颜色
- 第三周程序阅读(3) 利用函数访问私有数据成员
- 第三周 项目一 三角形类1
- iframe JavaScript打印
- Halcon学习笔记之缺陷检测(一)
- 第三周 项目一 三角形类1
- 颜色基本概念和颜色位移
- 多例模式之有上限多例类
- 第三周项目3 程序的多文件组织
- 第三周项目一三角形类1
- 三角形2
- LeetCode之Candy
- 第三周项目1--三角形类1
- Halcon学习笔记之支持向量机(一)
- 第三周项目一 三角形类