VB实现RGB888到YUV422的转换
来源:互联网 发布:手机淘宝联盟怎么返利 编辑:程序博客网 时间:2024/06/10 14:08
从前面的bmp文件格式以及YUV的格式介绍中,我们已经知道了两种文件之间的差异。再从网上找到YUV与RGB之间的换算关系:
Y = 0.257R + 0.504G + 0.098B + 16
U = -0.148R - 0.291G + 0.439B + 128
V = 0.439R - 0.368G - 0.071B + 128
好,现在准备工作已经差不多了。需要的就是整理一下思路了。
目的:将RGB888文件(即24位bmp) 转换为 YUV422(UYVY)
过程:RGB888 =》 YUV =》 YUV422 (注:中间的YUV就是按照上面的公式进行RGB到YUV的转换,但是格式上还不是YUV格式,所以还需要再次转换成YUV422。)
好,下面就可以累长城了。
RGB到YUV转换的代码如下:
Open strRGBfile For Binary As #1
Open strYUVfile For Binary As #100
'BMP 54个字节之后的是像素数据
lengRGB = rgbHeight * rgbWidth * 3
ReDim rgbContent(lengRGB - 1) '重定义数组,为读取文件做准备
Get #1, 55, rgbContent() '取得第一文件的内容到数组
Dim i, j As Long
Dim r, g, b As Integer
ReDim yuvContent(lengRGB - 1)
For i = 0 To rgbHeight - 1
For j = 0 To rgbWidth - 1
b = rgbContent(3 * (rgbWidth * i + j) + 0)
g = rgbContent(3 * (rgbWidth * i + j) + 1)
r = rgbContent(3 * (rgbWidth * i + j) + 2)
yuvContent(3 * (rgbWidth * (rgbHeight - 1 - i) + j)) = 0.257 * r + 0.504 * g + 0.098 * b + 16
yuvContent(3 * (rgbWidth * (rgbHeight - 1 - i) + j) + 1) = -0.148 * r - 0.291 * g + 0.439 * b + 128
yuvContent(3 * (rgbWidth * (rgbHeight - 1 - i) + j) + 2) = 0.439 * r - 0.368 * g - 0.071 * b + 128
Next j
Next i
close #1
close #100
已经将RGB数据完全转变为YUV的格式了,再就是转变为YUV422(UYVY),代码如下:
Open strYUVfile For Binary As #100
Dim j As Long
ReDim yuv422Content((lengRGB + 1) * 4 / 6 - 2)
For j = 0 To (lengRGB / 6 - 1) 'UYVY
yuv422Content(4 * j + 0) = Temp_yuvContent(6 * j + 1) / 2 + yuvContent(6 * j + 4) / 2 'U0
yuv422Content(4 * j + 1) = Temp_yuvContent(6 * j) 'Y0
yuv422Content(4 * j + 2) = Temp_yuvContent(6 * j + 2) / 2 + yuvContent(6 * j + 5) / 2 'V0
yuv422Content(4 * j + 3) = Temp_yuvContent(6 * j + 3) 'Y1
Next j
Put #100, , yuv422Content() '把yuv的内容写到yuv444件中
yuvlen = (lengRGB + 1) * 4 / 6 - 1
SavetoCfunction
'关闭文件
Close #100
MsgBox "完成。", vbInformation
这时候我们就完成任务了,YUV422的数据已经被写入了文件中。
要是有什么问题请及时与我联系!
下面show下我写的小软件吧:
已经实现的功能:
RGB888 =》YUV444
RGB888 =》YUV422(UYVY)
RGB888 =》YUV420 (YV12)
RGB888 =》YUV411 (YUYYVY)
YUV444 =》RGB888
YUV422(UYVY) =》RGB888
YUV420 (YV12) =》RGB888
YUV411 (YUYYVY) =》RGB888
剩下的格式还没有空去做,不过会做一个了另一个就简单多了。剩下的等以后有时间了再做吧!
- VB实现RGB888到YUV422的转换
- uyvy422到RGB888转换
- YUV444/422/411/420 到RGB888的转换
- RGB565和RGB888的转换
- RGB565 与 RGB888的相互转换
- RGB565 与 RGB888的相互转换
- rgb888与rgb565转换的影响
- VB实现数字到中文金额的转换函数
- VB实现数字到中文金额的转换函数
- YUV422格式的数据转换成RGB24
- RGB888 TO BT1120 转换
- YUV420、YUV422、RGB24转换
- YUV422 to RGB 转换
- YUV420、YUV422、RGB24转换
- YUV420、YUV422、RGB24转换
- YUV420、YUV422、RGB24转换
- YUV420、YUV422、RGB24转换
- YUV420、YUV422、RGB24转换
- JSP/Servlet编码问题总结
- 关于使用“远程桌面连接”中碰到的一点问题!
- Cygwin的使用方法
- JavaScript实现"CTRL+回车"提交表单
- Linux mount使用指南
- VB实现RGB888到YUV422的转换
- 多文件上传 大文件设置
- 【原创】破解光影魔术手0.24注册机(VB)源代码
- JSP/Servlet 中include方法的总结
- (转)多态的实现(比较经典)
- 小议jstl标签---c标签
- wxWidgets类列表(2.6.4)
- 成功在java年会发表了论文
- 关于23种设计模式的有趣见解