如何通过android中的模板将图片合成任何形状?

时间:2016-06-16 12:38:02

标签: android image crop

我想知道是否可以将图片裁剪为任何其他形状,而不仅仅是正方形,矩形或圆形。 基本上我正在寻找的是,用户可以选择一个png文件的模板(已经存在),并切割该形状的图片。

1 个答案:

答案 0 :(得分:0)

查看此代码:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final ImageView imageViewPreview = (ImageView) findViewById(R.id.imageview_preview);
    new Thread(new Runnable() {
        @Override
        public void run() {
            final Bitmap source = BitmapFactory.decodeResource(MainActivity.this.getResources(),
                    R.drawable.source);
            final Bitmap mask = BitmapFactory.decodeResource(MainActivity.this.getResources(),
                    R.drawable.mask);
            final Bitmap croppedBitmap = cropBitmap(source, mask);
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    imageViewPreview.setImageBitmap(croppedBitmap);
                }
            });
        }
    }).start();
}

private Bitmap cropBitmap(final Bitmap source, final Bitmap mask){
    final Bitmap croppedBitmap = Bitmap.createBitmap(
            source.getWidth(), source.getHeight(),
            Bitmap.Config.ARGB_8888);
    final Canvas canvas = new Canvas(croppedBitmap);
    canvas.drawBitmap(source, 0, 0, null);
    final Paint maskPaint = new Paint();
    maskPaint.setXfermode(
            new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
    canvas.drawBitmap(mask, 0, 0, maskPaint);
    return croppedBitmap;
}

}

主要功能是" cropBitmap"功能。基本上它接收两个位图,一个源和一个掩码,然后它" crop"使用蒙版形状的源位图。 这是我的源位图: Source bitmap 这是掩码位图: Mask bitmap 这就是结果: Result

另外,请查看这个精彩的演示文稿,这也可能对您有所帮助:Fun with Android shaders and filters