我有一个屏幕采集卡,给我一个YUV4:2:2格式的图像。
我需要把我的byte[]转换成RGB格式吗?
请帮帮忙,杰森
发布于 2011-08-06 00:24:04
你可以使用this library从RGB,YUV,HSB,HSL和许多其他颜色格式进行转换,例如在RGB类中使用静态方法来从YUV转换,只需调用
RGB rgb = RBB.YUVtoRBG(y, u, v);以及它的底层实现:
public static RGB YUVtoRGB(double y, double u, double v)
{
RGB rgb = new RGB();
rgb.Red = Convert.ToInt32((y + 1.139837398373983740*v)*255);
rgb.Green = Convert.ToInt32((
y - 0.3946517043589703515*u - 0.5805986066674976801*v)*255);
rgb.Blue = Convert.ToInt32((y + 2.032110091743119266*u)*255);
return rgb;
}发布于 2012-07-02 07:11:18
使用仅整数计算的解决方案(即,应该比浮点/双精度计算更快)是:
static byte asByte(int value)
{
//return (byte)value;
if (value > 255)
return 255;
else if (value < 0)
return 0;
else
return (byte)value;
}
static unsafe void PixelYUV2RGB(byte * rgb, byte y, byte u, byte v)
{
int C = y - 16;
int D = u - 128;
int E = v - 128;
rgb[2] = asByte((298 * C + 409 * E + 128) >> 8);
rgb[1] = asByte((298 * C - 100 * D - 208 * E + 128) >> 8);
rgb[0] = asByte((298 * C + 516 * D + 128) >> 8);
}这里使用PixelYUV2RGB函数来填充rgb字节数组中的值。
这比上面的要快得多,但在c#中的全高清图像的性能方面仍然低于平均水平。
请注意,这仅适用于YUV到RGB。YUV 422与每对UV (颜色)值的2个Y(亮度)值一起存储。因此,您将使用每一对的相同u,v值调用函数。下面的评论中提到了这一点的来源。
发布于 2014-01-31 13:10:59
有代码here可以做你想做的事情,但是RGB位图的字节顺序是颠倒的(交换红色和蓝色)。
https://stackoverflow.com/questions/6959275
复制相似问题