YUV 转 RGB 和 CreateBitmap ......格式是啥?
Posted
技术标签:
【中文标题】YUV 转 RGB 和 CreateBitmap ......格式是啥?【英文标题】:YUV to RGB and CreateBitmap...which is the format?YUV 转 RGB 和 CreateBitmap ......格式是什么? 【发布时间】:2014-09-08 11:56:04 【问题描述】:我不是图像格式方面的专家。我正在测试相机的帧速率性能。 当我将数据从 YUV 转换为 RGB 时,这个数据是哪种 RGB 格式的? RGB565 还是 argb8888? 为什么 createBitmap 需要很长时间?向原始数据添加信息?
【问题讨论】:
希望是 888,因为 565 会丢失很多细节。你用什么来执行转换?创建位图需要很长时间,因为相机图像很大并且需要移动大量数据。 【参考方案1】:这是rgb代码
public int[] YUV_NV21_TO_RGB( byte[] yuv, int width, int height)
final int frameSize = width * height;
int[] argb = new int[width*height];
final int ii = 0;
final int ij = 0;
final int di = +1;
final int dj = +1;
int a = 0;
for (int i = 0, ci = ii; i < height; ++i, ci += di)
for (int j = 0, cj = ij; j < width; ++j, cj += dj)
int y = (0xff & ((int) yuv[ci * width + cj]));
int v = (0xff & ((int) yuv[frameSize + (ci >> 1) * width + (cj & ~1) + 0]));
int u = (0xff & ((int) yuv[frameSize + (ci >> 1) * width + (cj & ~1) + 1]));
y = y < 16 ? 16 : y;
int a0 = 1192 * (y - 16);
int a1 = 1634 * (v - 128);
int a2 = 832 * (v - 128);
int a3 = 400 * (u - 128);
int a4 = 2066 * (u - 128);
int r = (a0 + a1) >> 10;
int g = (a0 - a2 - a3) >> 10;
int b = (a0 + a4) >> 10;
r = r < 0 ? 0 : (r > 255 ? 255 : r);
g = g < 0 ? 0 : (g > 255 ? 255 : g);
b = b < 0 ? 0 : (b > 255 ? 255 : b);
argb[a++] = 0xff000000 | (r << 16) | (g << 8) | b;
return argb;
问题是,如果我使用带有 RGB_565 选项的 CreateBitmap,时间至少比 ARGB8888 快 10 毫秒。 如果 RGB_565 是一种压缩(数据丢失),不应该相反(createBitmap with ARGB888 比 RGB_565 快)?
【讨论】:
以上是关于YUV 转 RGB 和 CreateBitmap ......格式是啥?的主要内容,如果未能解决你的问题,请参考以下文章