-3

我需要在我的 Android 手机上创建一个单色位图。
我有一个 1024 字节的数组I/System.out:[0, 127, 62, 28, 28, 8, 0, 112, 14, 9...。每个字节为 8 个像素(例如 62 -> 00111110,其中 1 为黑色像素,0 为白色像素)

我该怎么做?
谢谢!

4

2 回答 2

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;
}

希望对你有用,对不起我的英语不好:)

于 2018-08-01T11:25:50.230 回答
-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;
于 2018-08-01T11:03:52.557 回答