通用的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_PARAMSDim pOff(12) As LongpOff(0) = 1pOff(1) = 3pOff(2) = 5pOff(3) = 7pOff(4) = 8pOff(5) = 9pOff(6) = 10pOff(7) = 11pOff(8) = 0pOff(9) = 4pOff(10) = 2pOff(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 = 0cnvParam。nMethod = USE_BUILTINcnvParam。nActiveMethod = USE_BUILTINcnvParam。pCmykParams = 0cnvParam。pLabParams = 0cnvParam。pYuvParams = VarPtr(YUVParamas)cnvParam.sInputProfile(0) = 0cnvParam.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_PARAMSDim pOff(0) As LongpOff(0) = PLANAR_YVUDim 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 = 0cnvParam。nMethod = USE_BUILTINcnvParam。nActiveMethod = USE_BUILTINcnvParam。pCmykParams = 0cnvParam。pLabParams = 0cnvParam。pYuvParams = VarPtr(YUVParamas)cnvParam.sInputProfile(0) = 0cnvParam.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结束函数