BMP格式知识之二:16位,24位,32位的BMP图片算法是如何运算的
2015-06-12 23:06
405 查看
16位,24位,32位的BMP图片算法是如何运算的
这段代码的作用是将缓冲区里的24位、16位、32位的数据转换成RGB565格式的16位颜色值。if(color_byte == 3) //24位颜色图 { switch ( rgb ) { case 0 : tmp_color = buffer[count]>>3 ;//为什么要右移3位呢,它表示的是什么? color |= tmp_color; break ; case 1 : tmp_color = buffer[count]>>2 ;//为什么要右移2位呢,它表示的是什么? tmp_color <<= 5 ;////为什么要左移5位呢,它表示的是什么? color |= tmp_color ; break ; case 2 : tmp_color = buffer[count]>>3 ;//为什么要右移3呢,它表示的是什么? tmp_color <<= 11 ;//为什么左移11位,它表示的是什么? color |= tmp_color ; break ; } rgb ++ ; } else { if(color_byte==2) //16位颜色图 { switch ( rgb ) { case 0 : byte1 = buffer[count] ;//,它表示的是什么? break ; case 1 : color = buffer[count] ;//它表示的是什么? color<<=8 ; color |= byte1 ; break ; } rgb ++ ; } else { if(color_byte==4) //32位颜色图 { switch ( rgb ) { case 0 : byte1 = buffer[count] ; break ; case 1 : byte2 = buffer[count] ; break ; case 2 : byte3 = buffer[count] ; break ; case 3 : tmp_color = byte1 >> 3 ;//为什么要右移呢,它表示的是什么? color |= tmp_color; tmp_color = byte2 >>2 ;//为什么要右移呢,它表示的是什么? tmp_color <<= 5 ; color |= tmp_color ; tmp_color = byte3 >>3 ;//为什么要右移呢,它表示的是什么? tmp_color <<= 11 ; color |= tmp_color ; break ; } rgb ++ ; } } }
24位BMP文件:(rrrrrrrr,gggggggg,bbbbbbbb)蓝色在低地址
16位BMP文件:RGB555-xRRRRRGGGGGBBBBB,RGB565-RRRRRGGGGGGBBBBB,蓝色在低地址
32位BMP文件:(xxxxxxxx,rrrrrrrr,gggggggg,bbbbbbbb)蓝色在低地址,最高那个字节一般不处理。
你这段代码中的color应该是16位颜色,并且是RGB565格式,也就是红色5位,绿色6位,蓝色5位,RRRRRGGGGGGBBBBB。
24位转16位时,蓝色右移3位,是因为需要将8位蓝色转成5位蓝色,绿色先右移2位,是因为从8位转成6位,然后再左移5位,就是移到RGB565的16位数值的中间的位置上,00000GGGGGG00000,红色右移3位,就是8位转成5位,再左移11位,就是RRRRR00000000000。
16位转16位,直接将2字节拼接起来。
32位转16位,和24转16位类似,也是需要将8位颜色截短为5位和6位,然后拼起来。
相关文章推荐
- Observer观察者模式
- 观察者模式【设计模式】
- FaceBooK/infer-Mac下安装Java分析环境
- DialogFragment的使用(自定义Dialog )
- 单元测试系列之2:模拟利器Mockito
- 变量
- CentOS6.5安装LAMP环境的前期准备
- ZigZag Conversion
- VirtualBox虚拟机网络设置(四种方式)
- [NCH 1, 3]
- identifier "EXTI_InitTypeDef" is undefined
- 2015061201 - 马王堆汉墓(上)
- Storyboard Reference
- 单元测试系列之1:开发测试的那些事儿
- hdoj 2568 前进
- Leetcode[110]-Balanced Binary Tree
- 多表查询分页存储过程,解决了第二页不显示的问题
- 【安全】requests和BeautifulSoup小试牛刀
- openMSP430之io_test
- iOS学习笔记