[英]c# convert YUV 4:2:2 to RGB?
我有一個屏幕抓取器,可以為我提供YUV 4:2:2格式的圖像。
我需要將byte []轉換為RGB格式嗎?
請幫忙,傑森
您可以使用此庫從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;
}
有代碼在這里做你想要什么,但對於RGB位圖的字節順序反轉(交換紅色和藍色)。
使用僅整數計算(即應比浮點/雙精度計算更快)的解決方案是:
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#中全高清圖像的性能方面仍不及
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.