我想知道是否有可能将一张图片裁剪成任何其他形状,而不仅仅是方形、矩形或圆形。基本上我正在寻找的是,用户可以选择一个模板的png文件(已经存在),它剪切该形状的图片。
发布于 2016-06-16 21:33:13
看看这段代码:
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“函数。基本上,它接收两个位图,一个源和一个掩码,然后它使用掩码的形状“裁剪”源位图。这是我的源位图:

这是遮罩位图:

这就是结果:

另外,看看这个很棒的演示文稿,它可能也会对你有所帮助:Fun with Android shaders and filters
https://stackoverflow.com/questions/37859494
复制相似问题