【问题标题】: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 会丢失很多细节。你用什么来执行转换?创建位图需要很长时间,因为相机图像很大并且需要移动大量数据。

标签: android bitmap android-camera rgb yuv


【解决方案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 快)?

【讨论】:

    猜你喜欢
    • 2014-09-18
    • 1970-01-01
    • 2013-08-10
    • 2013-07-27
    • 2014-01-25
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    相关资源
    最近更新 更多