私はYUV 4:2:2形式の画像を表示するスクリーングラバーを持っています。C#でYUV 4:2:2をRGBに変換しますか?
byte []をRGB形式に変換する必要がありますか?
助けてください、 ジェイソン
私はYUV 4:2:2形式の画像を表示するスクリーングラバーを持っています。C#でYUV 4:2:2をRGBに変換しますか?
byte []をRGB形式に変換する必要がありますか?
助けてください、 ジェイソン
あなただけ
を呼び出し、YUVから変換するために、RGBのクラスで静的メソッドを使用してRGB、YUV、HSB、HSLおよび他の多くのカラーフォーマット、例から変換すること this libraryを使用することができます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;
}
マクロピクセルを無視します。 –
整数計算のみを使用して溶液(つまりはする必要があります)フロート/ダブル計算よりも高速である:
ここ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);
}
あなたは、RGBのバイト配列内の値を埋めるためにPixelYUV2RGB関数を使用します。
これは、上記よりもはるかに高速ですが、正確に何をしたい行うコードhere、しかしのバイト順序があり、C#
-1)A)サイト[ソース](http://msdn.microsoft.com/en-us/library/aa917087.aspx) B)これはYUV 4:4:4ではなく4:2:2に変換されます – pelesl
でフルHD映像のためのパフォーマンスの面でまだサブパーですRGBビットマップが反転されます(赤と青を交換します)。
あなたはこれを読んでいますか? http://en.wikipedia.org/wiki/YUV#Conversion_to.2Ffrom_RGB :) –
[YUVとRGBの変換](http://msdn.microsoft.com/en-us/library) /ms893078.aspx) –