C#YUV420ToRGB
时间: 2023-11-22 18:44:06 浏览: 148
C#中将YUV420格式的图像转换为RGB格式的图像可以使用以下代码:
```csharp
public static void YUV420ToRGB(byte[] yuv, byte[] rgb, int width, int height)
{
int frameSize = width * height;
int chromaSize = frameSize / 4;
// YUV420中Y分量的起始位置
int yIndex = 0;
// YUV420中U分量的起始位置
int uIndex = frameSize;
// YUV420中V分量的起始位置
int vIndex = frameSize + chromaSize;
for (int j = 0; j < height; j++)
{
int rgbIndex = j * width * 3;
int yIndexEnd = yIndex + width;
for (int i = yIndex, uvIndex = uIndex; i < yIndexEnd; i++, rgbIndex += 3)
{
int y = (yuv[i] & 0xff) - 16;
int u = (yuv[uvIndex++] & 0xff) - 128;
int v = (yuv[uvIndex++] & 0xff) - 128;
int r = (int)(1.164f * y + 1.596f * v);
int g = (int)(1.164f * y - 0.813f * v - 0.391f * u);
int b = (int)(1.164f * y + 2.018f * u);
rgb[rgbIndex] = (byte)(r < 0 ? 0 : (r > 255 ? 255 : r));
rgb[rgbIndex + 1] = (byte)(g < 0 ? 0 : (g > 255 ? 255 : g));
rgb[rgbIndex + 2] = (byte)(b < 0 ? 0 : (b > 255 ? 255 : b));
}
yIndex += width;
if (j % 2 == 1)
{
uIndex += width / 2;
vIndex += width / 2;
}
}
}
```
其中,yuv为输入的YUV420格式的图像数据,rgb为输出的RGB格式的图像数据,width和height分别为图像的宽度和高度。
阅读全文