Android: Bitmap の背景を透明にする
C# の Maketrasparent みたいなメソッドがあるわけじゃないらしい.getPixel でビットマップの各ピクセルの色を調べて,setPixel で透明にするというのが基本ぽい.
上記が参考になった.しかし,このソースのままだと decodeResource で作成した bitmap では IllegalStateException が出てうまくいかない.mutable な bitmap を生成して,その bitmap に処理をするようにしたらうまくいった.何かの参考になるかもしれないのでフィードバックしてみる.
Bitmap tmp = BitmapFactory.decodeResource(CustomSurfaceView.resources, R.drawable.sample); // sample.png というファイルがあるとする int width = tmp.getWidth(); int height = tmp.getHeight(); int[] pixels = new int[width * height]; int c = tmp.getPixel(0, 0); // 0,0 のピクセルと同じ色のピクセルを透明化する. Bitmap bitmap = Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888 ); tmp.getPixels(pixels, 0, width, 0, 0, width, height); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { if( pixels[x + y * width]== c){ pixels[x + y * width] = 0; } } } bitmap.eraseColor(Color.argb(0, 0, 0, 0)); bitmap.setPixels(pixels, 0, width, 0, 0, width, height);