将掩码原位应用于位图

时间:2014-11-30 11:01:49

标签: android bitmap mask

我试图以最节省内存的方式将椭圆/圆形蒙版应用于可变位图。输入位图采用ARGB_8888格式。我的目的是将一个椭圆/圆形绘制到ALPH_8位图中,然后使用生成的位图作为输入位图上的掩码。我的代码如下:

protected final static RectF rectF = new RectF();
protected final static Rect rect = new Rect();
protected final static Paint ovalPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
protected final static Paint maskPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
static {
maskPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
}
/**
 * Apply oval mask to bitmap
 * 
 * @param srcImage
 *            reference to bitmap image to which mask is applied
 * @return reference to resulting bitmap (may be same as bitmap passed)
 */
private Bitmap applyImageMAsk(Bitmap srcImage) {
final int width = srcImage.getWidth();
final int height = srcImage.getHeight();

Bitmap mask = Bitmap.createBitmap(width, height, Config.ALPHA_8);
final Canvas canvas = new Canvas(mask);

rect.right = width;
rect.bottom = height;
rectF.set(rect);

canvas.drawOval(rectF, ovalPaint);
**//mask = mask.copy(Config.ARGB_8888, false);**

canvas.setBitmap(srcImage);
canvas.drawBitmap(mask, rect, rect, maskPaint);

return srcImage;
}

这不起作用,不应用蒙版。但是,如果我取消注释mask.copy行,有效地生成椭圆形蒙版的ARGB_8888副本,它可以完美地工作。显然,使用ALPHA_8位图会更有效,我想了解为什么这不起作用。

0 个答案:

没有答案