LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1813|回复: 1

RGB565到RGB24转换

[复制链接]
发表于 2007-5-5 09:59:48 | 显示全部楼层 |阅读模式
我用摄像头采集到的是16bit的rgb流,现在要用libjpeg库提供的压缩程序将其压缩并保存成jpg文件,可是该库好象只能压缩24位的,于是我就想先将RGB565转换成RGB24再调用该库的压缩函数。
  转换程序如下:
  rgb5652rgb888(unsigned char *image,unsigned char *image888)
  {
   unsigned char R,G,B;
  B=*image&0x1F;//000BBBBB
  G=*(image+1)<<3&0x38+*image>>5&0x07;//得到00GGGGGG00
  R=*(image+1)>>3&0x1F;//得到000RRRRR
  *image888=R|G|B;
  }
  可是转换并压缩后什么都没有。用GDB调试发现在这个转换中B,G,R根本没有数据始终都是'\0'。哪位能不能指点一下我这个问题出在哪里???移位是不是搞错了?该如何处理呢?转换最后要得到的是unsigned char 型的RGB24流。
  谢谢
发表于 2007-5-6 21:51:05 | 显示全部楼层
注意:
unsigned char *image888
unsigned char R,G,B;
*image888=R|G|B;

这里输出只写了1 byte,而RGB24应该是3 bytes吧!
rgb5652rgb888(unsigned char *image,unsigned char *image888)
{
unsigned char R,G,B;
B=(*image) & 0x1F;//000BBBBB
G=( *(image+1) << 3 ) & 0x38 + ( *image >> 5 )  & 0x07 ;//得到00GGGGGG00
R=( *(image+1) >> 3 )  & 0x1F; //得到000RRRRR
*(image888+0)=B * 255 / 63; // 把5bits映射到8bits去,自己可以优化一下算法,下同
*(image888+1)=G * 255 / 127;
*(image888+2)=R * 255 / 63;
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表