bmp 存图 转换

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位,然后拼起来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值