BMP格式知识之二:16位,24位,32位的BMP图片算法是如何运算的
来源:互联网 发布:python 数据接口 编辑:程序博客网 时间:2024/05/22 05:17
16位,24位,32位的BMP图片算法是如何运算的
这段代码的作用是将缓冲区里的24位、16位、32位的数据转换成RGB565格式的16位颜色值。
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位,然后拼起来。
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位,然后拼起来。
0 0
- BMP格式知识之二:16位,24位,32位的BMP图片算法是如何运算的
- BMP格式知识之二:16位,24位,32位的BMP图片算法是如何运算的
- Android系统移植与调试之------->如何使用PhotoShop转换24位的bmp图片为16位bmp图片
- 24位深的bmp图片转换为16位深RGB565格式的bmp图片源码
- Android如何把图片转为深度为32位格式为.bmp的图片
- 求助!如何使用编程读取24位bmp格式的图片?
- BMP图像的处理(24位转16位)
- 24位深,16位深 BMP 图片解析
- 24位BMP转8位BMP
- 24位bmp的存储方式
- 将32位BMP文件转换为24位BMP
- 32位bmp图转24位bmp图
- 16位BMP图转32位BMP图
- 32位PNG转32位BMP的工具软件介绍
- BMP的8位位图转换24位位图
- 实现1位,4位,8位,24位BMP位图的互相转换的方法,32位转24位
- 24/16/8位bmp图片文件头、信息头的二进制数据
- 24/16/8位bmp图片文件头、信息头的二进制数据
- C++常成员函数 - const 关键字
- 好玩的WPF第三弹:颤抖吧,地球!消失吧,地球!
- iOS学习笔记
- 栈学习之括号匹配
- Leetcode[110]-Balanced Binary Tree
- BMP格式知识之二:16位,24位,32位的BMP图片算法是如何运算的
- identifier "EXTI_InitTypeDef" is undefined
- VirtualBox虚拟机网络设置(四种方式)
- 单元测试系列之2:模拟利器Mockito
- 2015061202 - 在望京soho见到潘石屹啦
- 自定义UITabbar
- 使用Java完成《算法导论》习题2.1-1
- 单元测试系列之3:测试整合之王Unitils
- DialogFragment的使用(自定义Dialog )