首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

,有关YUY2转BMP方面的有关问题

2013-09-18 
求助,有关YUY2转BMP方面的问题最近在弄wince下面的USB摄像头拍照,用的摄像头输出的是YUY2格式的,为了方便

求助,有关YUY2转BMP方面的问题
最近在弄wince下面的USB摄像头拍照,用的摄像头输出的是YUY2格式的,为了方便使用要转成BMP,按照网上搜到的YUY2转RGB的公式进行了转换,用网上的例子是对的,但是用拍到的就乱了,摄像头貌似没问题,用别人的软件能够摄像和截图,发现拍到的YUY2数据bit数比长度×宽度×2要小一些,个人感觉是不是错位了,求各位解惑。
另外就是YUY2的数据是不是分块的呢?网上的例子是分单双行存储显示的,我这的貌似是分的四块,有没有相关需要注意的地方,我的做法就是读进来YUY2 16bits的数据,然后转换RGB后按照给定的长宽画在DC上
[解决办法]
不同的颜色数没像素的bit数不同 http://bbs.csdn.net/topics/330035576
BITMAP 格式有行字节对齐 http://bbs.csdn.net/topics/390284489
[解决办法]
YUY2只是色彩系统,用4个字节表示两个RGB的值而已,你只要公式对了应该不会有太大的问题。
还有你有一个误区,YUY2不是 16bits 的数据 ,他是 32 bit 表示两个 RGB 值,
比如
Byte 1         Y0
Byte 2         U
Byte 3         Y1
Byte 4         V
这样一个排列
两个 RGB 分别是
rgb1.red = int((Y0 * 298 + V * 409 + 128)/(2^8))
rgb1.green = int((Y0 * 298 - U * 100 - V * 208 + 128)/(2^8))
rgb1.blue = int((Y0 * 298 + U * 516 + 128)/(2^8))

rgb2.red = int((Y1 * 298 + V * 409 + 128)/(2^8))
rgb2.green = int((Y1 * 298 - U * 100 - V * 208 + 128)/(2^8))
rgb2.blue = int((Y1 * 298 + U * 516 + 128)/(2^8))

这样一来,就可以把4个字节的YUY2值换算成6个字节的RGB数据了
[解决办法]
如果是分块的话,是否存在字节对齐。
最好取得摄像头输出YUY2格式的说明,否则只能不停尝试了。
[解决办法]

引用:
那应该颜色是对了,就是四个字节变成六个字节,四个字节的YUYV表示两个像素的RGB,也就是六个字节。
我从摄像头里面获取了格式,貌似是width*height 16bits YUY2还有什么忘了,我回去看看弄个完整的。谢谢
有没有全面的YUY2的说明呢?我可以自己查着看,我没找到,都是说颜色转换的

YUY2只不过是一个色彩系统,就和RGB一样只是个色彩系统,涉及到的就是几个字节的运算问题,如果你想知道YUY2是怎么回事,你可以看看YUV是怎么回事,YUY2就是YUV的延伸,所以色彩概念是一样的,只是具体公式有点不同,但如果你想了解的是文件或数据格式,那和色彩系统是无关的,你需要去查阅你的文件数据格式说明,YUY2色彩系统就这么点东西了,就和RGB一样的,如:
RGB色彩系统:
Byte1 Blue
Byte2 Green
Byte3 Red



YUY2色彩系统:
Byte 1         Y0
Byte 2         U
Byte 3         Y1
Byte 4         V

这已经基本说明完全了,要公式上面也有了

热点排行