Android NV21到灰度打印

Android NV21到灰度打印,android,grayscale,yuv,Android,Grayscale,Yuv,我已从onPreviewFrame(字节[]数据,摄像头){…}成功 将NV21提取Y为灰度值,但我想打印灰度值,灰度值应为0~255,但根据黑色区域应为0,但打印出来-16777216,我怎么能看到0~255 另外,我知道ARGB_8888是32位的,所以如果0000,提取一个黑色区域 public Bitmap applyGrayScale( byte [] data, int width, int height) { int[] pixels = new int[width * h

我已从onPreviewFrame(字节[]数据,摄像头){…}成功 将NV21提取Y为灰度值,但我想打印灰度值,灰度值应为0~255,但根据黑色区域应为0,但打印出来-16777216,我怎么能看到0~255 另外,我知道ARGB_8888是32位的,所以如果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);
}
公共位图applyGrayScale(字节[]数据,整数宽度,整数高度){
int[]像素=新int[宽度*高度];
INTP;
整数大小=宽度*高度;
对于(int i=0;i像素[i]=0xff000000 | p我想,您所需要做的就是打印
p
,而不是
像素[i]

循环示例:

for(int i = 0; i < size; i++) {
    p = data[i] & 0xFF;
    Log.d("pixels=", String.valueOf(p));       
}
for(int i=0;i
-16777216
ARGB_8888
格式打印。
-16777216
0xFF000000
的表示形式
较高的字节等于
0xFF
是alpha通道(不透明像素-无透明度)。
所有三个颜色通道都是零

alpha通道是黑色不是
0000
的原因
ARGB_8888
格式中,不透明的黑色是:
1111111000000000000000000000000

对于灰色像素,三个颜色通道具有相同的值:R=G=B.
您的代码:
pixels[i]=0xff000000|p