在YUV420SP图像格式转换为RGB格式期间进行优化。
我正在考虑。
返回值是一个彩色数组,每个RGB的值都在0到255之间。
这是我的完整源代码
Color[] YUV420SPtoRGB(byte[] yuv420sp, int width, int height)
{
int frameSize = width * height;
int[] rgb = new int[frameSize];
Color32 color = new Color32();
Color[] colors = new Color[width * height];
for (int j = 0, yp = 0; j < height; j++)
{
int uvp = frameSize + (j >> 1) * width, u = 0, v = 0;
for (int i = 0; i < width; i++, yp++)
{
int y = (0xff & ((int)yuv420sp[yp])) - 16;
if (y < 0) y = 0;
if ((i & 1) == 0)
{
v = (0xff & yuv420sp[uvp++]) - 128;
u = (0xff & yuv420sp[uvp++]) - 128;
}
int y1192 = 1192 * y;
int r = (y1192 + 1634 * v);
int g = (y1192 - 833 * v - 400 * u);
int b = (y1192 + 2066 * u);
if (r < 0) r = 0; else if (r > 262143) r = 262143;
if (g < 0) g = 0; else if (g > 262143) g = 262143;
if (b < 0) b = 0; else if (b > 262143) b = 262143;
rgb[yp] = (int)(0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff));
color.r = (byte)((rgb[yp] >> 16));
color.g = (byte)((rgb[yp] >> 8));
color.b = (byte)(rgb[yp]);
colors[yp] = color;
}
}
return colors;
}
当前,在进行RGB计算之后,将该值放入int数组中。
int r = (y1192 + 1634 * v);
int g = (y1192 - 833 * v - 400 * u);
int b = (y1192 + 2066 * u);
rgb[yp] = (int)(0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff));
它将值从0除以255得到值。
color.r = (byte)((rgb[yp] >> 16));
color.g = (byte)((rgb[yp] >> 8));
color.b = (byte)(rgb[yp]);
colors[yp] = color;
如果我跳过这一部分,我认为我可以对其进行优化。我该怎么办?
rgb[yp] = (int)(0xff000000 | ((r << 6) & 0xff0000) | ((g >> 2) & 0xff00) | ((b >> 10) & 0xff));
更新1.现在
if (r < 0) r = 0; else if (r > 262143) r = 262143;
if (g < 0) g = 0; else if (g > 262143) g = 262143;
if (b < 0) b = 0; else if (b > 262143) b = 262143;
color.r = (byte)(((r << 6) & 0xff0000) >> 16);
color.g = (byte)(((g >> 2) & 0xff00) >> 8);
color.b = (byte)((b >> 10) & 0xff);
colors[yp] = color;