如何从位图中切割(删除)一个部分?
我想让该部分/形状被删除.. 在删除的位置留下透明..
假设形状是圆形或正方形。
你应该可以使用 Porter-Duff 颜色过滤器和 Canvas 实现这个功能:
public void punchHole(Bitmap bitmap, float cx, float cy, float radius) {
Canvas c = new Canvas(bitmap);
Paint paint = new Paint();
paint.setColorFilter(new PorderDuffColorFilter(0, PorderDuff.Mode.CLEAR));
c.drawCircle(cx, cy, radius, paint);
}
嗯,那样是错误的。然而,使用 Porter-Duff 转移模式确实可以起作用:
public void punchHole(Bitmap bitmap, float cx, float cy, float radius) {
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
canvas.drawCircle(cx, cy, radius, paint);
}
(传递的位图参数需要是可修改的。)
PorderDuff.Mode.CLEAR
应该产生颜色0和透明度0作为输出。这个答案似乎证实它在Android中确实会表现出这种方式。AlphaComposite.CLEAR的JavaDocs也说了同样的事情。 - Ted HoppPorterDuffXferMode
可以起作用。我更新了我的回答,展示所需的代码。 - Ted Hopppaint.setXferMode(new PorterDuffXferMode(PorterDuff.Mode.CLEAR));
生效。1)我将背景布局设置为明亮的绿色。2)在我的自定义视图类中,我将使用 Mode.Clear 的 paint 来“切割”矩形。3)结果是我的矩形位于明亮的绿色背景上,所有应该从矩形中切割出来的形状都显示为纯黑色!(我期望背景绿色能够“透过”那些应该被切割出来的区域。 :-( - Someone SomewhereBitmap bmp = ...;
bmp.setPixel (100,100,Color.TRANSPARENT);
对于偏移量为100,100的像素。虽然在许多像素上执行此操作可能会潜在地变慢...