Android NV21到灰度打印
我已从onPreviewFrame(字节[]数据,摄像头){…}成功 将NV21提取Y为灰度值,但我想打印灰度值,灰度值应为0~255,但根据黑色区域应为0,但打印出来-16777216,我怎么能看到0~255 另外,我知道ARGB_8888是32位的,所以如果0000,提取一个黑色区域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
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