Androidは画像を切り取り、背景色を透明にする


最近、ピンイン画像の開発でカット画像を実現し、背景色を透明にする方法を共有しています.
まず、色が除去する透明になるように、画像品質はConfigでなければならない.ARGB_4444またはConfig.ARGB_8888、以下の方法でリソースマップを変換する
bmp = bmp.copy(Bitmap.Config.ARGB_8888, true);
は次にフィルタリングされます.コードは次のとおりです.
Canvas c = new Canvas(bmp);
		Paint p = new Paint();
		p.setAlpha(0);
		p.setXfermode(new AvoidXfermode(removeColor, 0, AvoidXfermode.Mode.TARGET));
		c.drawPaint(p);
		return bmp;

setXfermode()メソッドの使い方については参考にしてくださいhttp://yueguc.iteye.com/blog/782109
変換後、リソースマップを次の方法で切り取って、必要なブロックを取得します.
Bitmap tileImg = Bitmap.createBitmap(sourceImg, xIndex, yIndex,  set.tileWidth, set.tileHeight);
しかし、ブロックが切り取られた後、これは私たちが望んでいる効果ではなく、背景色が透明ではなく黒になることを発見しました.
テストによる検出
Bitmap.createBitmap(sourceImg, xIndex, yIndex,  set.tileWidth, set.tileHeight);
リソースマップが何ビットであるかにかかわらず、作成されたピクチャはRGB_に変換されます.565なので、透明なチャネルはサポートされていません.
ネット検索では,原図の品質を保持できる別の剪断方法が見つかった.
public static Bitmap cutBitmap(Bitmap mBitmap, Rect r, Bitmap.Config config) {  
        int width = r.width();  
        int height = r.height();  
        
        Bitmap croppedImage = Bitmap.createBitmap(width, height, config);  
        
        Canvas canvas = new Canvas(croppedImage);
        Rect dr = new Rect(0, 0, width, height);  
        canvas.drawBitmap(mBitmap, r, dr, null);
        return croppedImage;
}

最後に、この方法が実行可能であることを検証します.他の実現方法があれば、コメントを歓迎して心得を交流します!