Androidは画像を切り取り、背景色を透明にする
最近、ピンイン画像の開発でカット画像を実現し、背景色を透明にする方法を共有しています.
まず、色が除去する透明になるように、画像品質はConfigでなければならない.ARGB_4444またはConfig.ARGB_8888、以下の方法でリソースマップを変換する
setXfermode()メソッドの使い方については参考にしてくださいhttp://yueguc.iteye.com/blog/782109
変換後、リソースマップを次の方法で切り取って、必要なブロックを取得します.
テストによる検出
ネット検索では,原図の品質を保持できる別の剪断方法が見つかった.
最後に、この方法が実行可能であることを検証します.他の実現方法があれば、コメントを歓迎して心得を交流します!
まず、色が除去する透明になるように、画像品質は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;
}
最後に、この方法が実行可能であることを検証します.他の実現方法があれば、コメントを歓迎して心得を交流します!