ARCore YUV转RGB
文章目录
- 1.前言
- 2.代码
- 3.结论
之前的文章中分析了YUV转RGB的相关内容,这在跟硬件层的数据处理时比较方便,yuv数据均存在一个数组中,但是在研究arcore unity层代码时通过CameraImageBytes的类型传给应用层。ARCORE通过YUV三层将各层的数据传到上层,所以处理时相对来说更简单。
2.代码
转换代码:
public static byte[] CameraImageToRGB(CameraImageBytes imageBytes)
{
int w = imageBytes.Width;
int h = imageBytes.Height;
byte[] Y = new byte[w * h];
byte[] UV = new byte[w * h / 2];
byte[] RGB = new byte[w * h * 3];
//byte[] RGBA = new byte[w * h * 4];
Marshal.Copy(imageBytes.Y, Y, 0, w * h);
Marshal.Copy(imageBytes.U, UV, 0, w * h / 2);
for (int i = 0; i < h; i++)
{
for (int j = 0; j < w; j++)
{
int y = Y[w * i + j] & 0xFF;
int u = UV[((i / 2) * (w / 2) + j / 2) * 2 + 0] & 0xFF;
int v = UV[((i / 2) * (w / 2) + j / 2) * 2 + 1] & 0xFF;
int r = (256 * y + 351 * (v - 128)) >> 8;
int g = (256 * y - 086 * (u - 128) - 179 * (v - 128)) >> 8;
int b = (256 * y + 444 * (u - 128)) >> 8;
if (r > 255) r = 255;
if (g > 255) g = 255;
if