问题描述
我有一个掩码位图,一半是红色,一半是透明的https://www.dropbox.com/s/931ixef6myzusi0/s_2.png
I have a mask bitmap with a half is red color and ones is transparent like thishttps://www.dropbox.com/s/931ixef6myzusi0/s_2.png
我想使用遮罩位图在画布上绘制仅在红色区域可见的内容,代码如下:
I want to use mask bitmap to draw content on canvas only visible in red area, code like this:
Paint paint = new Paint();
public void draw(Canvas canvas) {
// draw content here
...
//and mask bitmap here
paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.DST_IN));
canvas.drawBitmap(maskBitmap, 0, 0, paint);
}
结果如我所料(内容仅在红色区域可见,但透明区域变成黑色是问题!)
The result as my expecting (content only visible in red area, BUT THE TRANSPARENT AREA BECOME BLACK IS PROBLEM!)
此图像结果:https://www.dropbox.com/s/mqj48992wllfkiq/s_2%20copy.png有人帮帮我吗???
this image result :https://www.dropbox.com/s/mqj48992wllfkiq/s_2%20copy.pngAnyone help me???
推荐答案
这是一个帮助我实现屏蔽的解决方案:
Here is a solution which helped me to implement masking:
public void draw(Canvas canvas) {
Bitmap original = BitmapFactory.decodeResource(getContext().getResources(),R.drawable.original_image);
Bitmap mask = BitmapFactory.decodeResource(getContext().getResources(),R.drawable.mask_image);
//You can change original image here and draw anything you want to be masked on it.
Bitmap result = Bitmap.createBitmap(mask.getWidth(), mask.getHeight(), Config.ARGB_8888);
Canvas tempCanvas = new Canvas(result);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
tempCanvas.drawBitmap(original, 0, 0, null);
tempCanvas.drawBitmap(mask, 0, 0, paint);
paint.setXfermode(null);
//Draw result after performing masking
canvas.drawBitmap(result, 0, 0, new Paint());
}
遮罩应该是透明的白色图像.
它将像这样工作:
+ =
The mask should be a white image with transparency.
It will work like this:
+ =
这篇关于画布上的 Android Mask 位图生成黑色空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!