2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > BMP格式知识之二:16位 24位 32位的BMP图片算法是如何运算的

BMP格式知识之二:16位 24位 32位的BMP图片算法是如何运算的

时间:2019-01-08 02:59:48

相关推荐

BMP格式知识之二:16位 24位 32位的BMP图片算法是如何运算的

BMP格式知识之二:16位,24位,32位的BMP图片算法是如何运算的

原文:/qq445803843/article/details/46476433

这段代码的作用是将缓冲区里的24位、16位、32位的数据转换成RGB565格式的16位颜色值。

[cpp]view plaincopyif(color_byte==3)//24位颜色图 { switch(rgb) { case0:tmp_color=buffer[count]>>3;//为什么要右移3位呢,它表示的是什么? color|=tmp_color; break; case1:tmp_color=buffer[count]>>2;//为什么要右移2位呢,它表示的是什么? tmp_color<<=5;为什么要左移5位呢,它表示的是什么? color|=tmp_color; break; case2:tmp_color=buffer[count]>>3;//为什么要右移3呢,它表示的是什么? tmp_color<<=11;//为什么左移11位,它表示的是什么? color|=tmp_color; break; } rgb++; } else { if(color_byte==2)//16位颜色图 { switch(rgb) { case0:byte1=buffer[count];//,它表示的是什么? break; case1: color=buffer[count];//它表示的是什么? color<<=8; color|=byte1; break; } rgb++; } else { if(color_byte==4)//32位颜色图 { switch(rgb) { case0:byte1=buffer[count]; break; case1:byte2=buffer[count]; break; case2:byte3=buffer[count]; break; case3: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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。