通用的YUV转换提供了将任何YUV格式转换为任何支持的颜色空间的能力,使用YUV_PARAMS结构并遵守下面列出的限制。在定义了YUV格式之后,就可以像任何其他转换一样,正常地进行转换。使用L_ClrConvert执行转换和调用L_ClrFree释放转换句柄。目前不支持从任何颜色空间到通用YUV的转换。
通用YUV转换目前有以下限制:
不支持Y的子采样
Y元素的个数必须是U和V的倍数。
对于非平面格式,不支持Y、U和V的垂直子采样。
平面格式不支持对齐;行宽不能包含额外的字节。
U和V的水平子采样周期必须是彼此的倍数,U和V的垂直子采样周期也必须是彼此的倍数。
例子:
使用通用YUV转换Y41P到RGB:
函数GenericY41PToRGB(YUVData() As Byte, RGBData() As Byte, nWidth As Integer, nHeight As Integer) As Integer
将ret设为整数
Dim ClrHandle As Long
将cnvParam设置为CONVERSION_PARAMS
Dim pOff(12) As Long
pOff(0) = 1
pOff(1) = 3
pOff(2) = 5
pOff(3) = 7
pOff(4) = 8
pOff(5) = 9
pOff(6) = 10
pOff(7) = 11
pOff(8) = 0
pOff(9) = 4
pOff(10) = 2
pOff(11) = 6
”(1,3,5,7,8,9,10,11,0,4、2、6)
Dim YUVParamas As LPYUV_PARAMS
与YUVParamas
.uStructSize = Len(YUVParamas)
.nMask = 0
.nUh = 4
.nUv = 1
.nVh = 4
.nVv = 1
.pOffsets = VarPtr(pOff(0))
.nMacroPixel = 8
.nRange = YUVRANGE_FULL
.bPlanar = 0
结尾
cnvParam。uStructSize = Len(cnvParam)
cnvParam。nquantiization = 0
cnvParam。nMethod = USE_BUILTIN
cnvParam。nActiveMethod = USE_BUILTIN
cnvParam。pCmykParams = 0
cnvParam。pLabParams = 0
cnvParam。pYuvParams = VarPtr(YUVParamas)
cnvParam.sInputProfile(0) = 0
cnvParam.sOutputProfile(0) = 0
(ClrHandle, CCS_YUV, CCS_RGB, cnvParam)
ret = L_ClrConvert (ClrHandle, YUVData(0), RGBData(0), nWidth, nHeight, 0,0)
ret = L_ClrFree (ClrHandle)
GenericY41PToRGB = ret
结束函数
使用通用YUV转换YVU9(平面)到RGB:
函数genericyvu9toorgb (YUVData() As Byte, RGBData() As Byte, nWidth As Integer, nHeight As Integer) As Integer
将ret设为整数
Dim ClrHandle As Long
将cnvParam设置为CONVERSION_PARAMS
Dim pOff(0) As Long
pOff(0) = PLANAR_YVU
Dim YUVParamas As LPYUV_PARAMS
与YUVParamas
.uStructSize = Len(YUVParamas)
.nMask = 0
.nUh = 4
.nUv = 1
.nVh = 4
.nVv = 1
.pOffsets = VarPtr(pOff(0))
.nMacroPixel = 8
.nRange = YUVRANGE_FULL
.bPlanar = 1
结尾
cnvParam。uStructSize = Len(cnvParam)
cnvParam。nquantiization = 0
cnvParam。nMethod = USE_BUILTIN
cnvParam。nActiveMethod = USE_BUILTIN
cnvParam。pCmykParams = 0
cnvParam。pLabParams = 0
cnvParam。pYuvParams = VarPtr(YUVParamas)
cnvParam.sInputProfile(0) = 0
cnvParam.sOutputProfile(0) = 0
(ClrHandle, CCS_YUV, CCS_RGB, cnvParam)
ret = L_ClrConvert (ClrHandle, YUVData(0), RGBData(0), nWidth, nHeight, 0,0)
ret = L_ClrFree (ClrHandle)
GenericYVU9ToRGB = ret
结束函数