YUV到RGB和CreateBitmap ......格式是什么?

时间:2014-07-17 14:35:22

标签: android bitmap android-camera rgb yuv

我不是图像格式的专家。我正在测试相机的帧速率性能。 当我将数据从YUV转换为RGB时,这个RGB格式的数据是? rgb565还是argb8888? 为什么createBitmap需要很长时间?将信息添加到原始数据?

1 个答案:

答案 0 :(得分:0)

这是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是一种压缩(数据丢失),则不应该相反(带有ARGB888的createBitmap比RGB_565快)?