【问题标题】:Android NV21 to grayscale printAndroid NV21转灰度打印
【发布时间】:2017-02-22 07:41:00
【问题描述】:

我已经从 onPreviewFrame (byte [] data, camera camera) {...} 将NV21提取Y为灰度值,但是我想打印灰度值,灰度值应该是0~255 但是根据黑色区域应该是0却打印出-16777216,怎么才能看到0~255 PS.我知道 ARGB_8888 是 32 位,所以要提取黑色区域 if 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

public Bitmap applyGrayScale( byte [] data, int width, int height) {
    int[] pixels = new int[width * height];
    int p;
    int size = width*height;

    for(int i = 0; i < size; i++) {
        p = data[i] & 0xFF;
        pixels[i] = 0xff000000 | p<<16 | p<<8 | p;
        Log.d("pixels=", String.valueOf(pixels[i]));
    }
    return Bitmap.createBitmap(pixels, width, height, Bitmap.Config.ARGB_8888);
}

enter image description here

【问题讨论】:

    标签: android grayscale yuv


    【解决方案1】:

    我想,您需要做的就是打印p 而不是pixels[i]

    循环示例:

    for(int i = 0; i < size; i++) {
        p = data[i] & 0xFF;
        Log.d("pixels=", String.valueOf(p));       
    }
    

    -16777216ARGB_8888 格式打印出来。
    -16777216two's complementtwo's complement 表示形式。
    较高的字节,等于0xFF 是 Alpha 通道(不透明像素 - 没有透明度)。
    所有三个颜色通道都是零。

    Alpha 通道是黑色不是的原因0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
    ARGB_8888 格式中,不透明黑色为:11111111 00000000 00000000 00000000

    对于灰色像素,三个颜色通道具有相同的值:R = G = B。
    您的代码:pixels[i] = 0xff000000 | p&lt;&lt;16 | p&lt;&lt;8 | p;p 的值复制到 R、G 和 B,并将 Alpha 通道设置为 0xFF(十进制为 255)。
    有关详细信息,请参阅ARGB 格式。

    所以你可以打印p的值。

    【讨论】:

      猜你喜欢
      • 2015-04-05
      • 2014-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      相关资源
      最近更新 更多