如何设置PorterDuffXfermode,结果偏差太大

时间:2012-11-08 08:31:35

标签: android android-canvas

以下是我的计划和参考图片。

计划:

int width = src.getWidth();
int height = src.getHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas (bitmap);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setDither(true);
canvas.drawBitmap(src, 0, 0, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.MULTIPLY)); 
paint.setColor(Color.RED);
paint.setAlpha(35);
canvas.drawRect(0, 0, width, height, paint);

参考图片:

enter image description here

我使用上面的程序为照片添加浅透明的红色(带alpha)。但我不清楚为什么照片会变成深红色。 “理想的结果”是由Photoshop制作的。我只是在原始照片之前添加了一个红色图层。而不是改为低透明度和MULTIPLY。

它们是不是相同的处理概念或我的程序有什么问题?它是否不能使用Mode.MULTIPLY来创建“理想结果”?有人能给我一些意见吗?

非常感谢谢谢!

1 个答案:

答案 0 :(得分:2)

Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas mCanvas = new Canvas(bitmap);
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.LIGHTEN));
paint.setColor(Color.RED);
paint.setAlpha(95);
mCanvas.drawBitmap(src, 0, 0, null);
mCanvas.drawRect(0, 0, src.getWidth(), src.getHeight(), paint);

使用模式Lighten和Alpha为95,我得到了更接近您要求的东西。

结果:

enter image description here