我需要在我的 Android 手机上创建一个单色位图。
我有一个 1024 字节的数组I/System.out:[0, 127, 62, 28, 28, 8, 0, 112, 14, 9...
。每个字节为 8 个像素(例如 62 -> 00111110,其中 1 为黑色像素,0 为白色像素)
我该怎么做?
谢谢!
我需要在我的 Android 手机上创建一个单色位图。
我有一个 1024 字节的数组I/System.out:[0, 127, 62, 28, 28, 8, 0, 112, 14, 9...
。每个字节为 8 个像素(例如 62 -> 00111110,其中 1 为黑色像素,0 为白色像素)
我该怎么做?
谢谢!
我想这就是你要找的。此代码会将您的字节数组转换为位图。您必须根据需要调整位图大小。
public Bitmap arrayToBitmap(int width, int height, byte[] arr){
Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565 );
int i=0,j=0;
for(int x=0; x<bmp.getWidth(); x++){
for(int y=0; y<bmp.getHeight(); y++){
int pixel = getBit(arr[i], j);
if(pixel == 1){
bmp.setPixel(x, y, Color.BLACK);
}else{
bmp.setPixel(x, y, Color.WHITE);
}
if(j==7){
i++;
j=0;
}else{
j++;
}
}
}
return bmp;
}
和 getBit 方法感谢这个答案:
public int getBit(byte b, int position) {
return (b >> position) & 1;
}
希望对你有用,对不起我的英语不好:)
首先将字节数组转换为位图
Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, bitmapdata.length);
然后您可以使用 ColorMatrix 将图像转换为单色 32bpp。
Bitmap bmpMonochrome = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmpMonochrome);
ColorMatrix ma = new ColorMatrix();
ma.setSaturation(0);
Paint paint = new Paint();
paint.setColorFilter(new ColorMatrixColorFilter(ma));
canvas.drawBitmap(bmpSrc, 0, 0, paint);
这简化了颜色->单色转换。现在您可以执行 getPixels() 并读取每个 32 位像素的最低字节。如果小于 128 则为 0,否则为 1。
您可以尝试将每个像素转换为 HSV 空间,并使用该值来确定目标图像上的像素应该是黑色还是白色:
Bitmap bwBitmap = Bitmap.createBitmap( bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.RGB_565 );
float[] hsv = new float[ 3 ];
for( int col = 0; col < bitmap.getWidth(); col++ ) {
for( int row = 0; row < bitmap.getHeight(); row++ ) {
Color.colorToHSV( bitmap.getPixel( col, row ), hsv );
if( hsv[ 2 ] > 0.5f ) {
bwBitmap.setPixel( col, row, 0xffffffff );
} else {
bwBitmap.setPixel( col, row, 0xff000000 );
}
}
}
return bwBitmap;