簡體   English   中英

C#將YUV 4:2:2轉換為RGB?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM