我正在尝试使用类似 Multiply 的混合模式将两个图像与 Android 混合在一起。
// Prepare -------------------------------
// Create source images
Bitmap img1 = ...
Bitmap img2 = ...
// Create result image
Bitmap result = ...
Canvas canvas = new Canvas();
canvas.setBitmap(result);
// Get proper display reference
BitmapDrawable drawable = new BitmapDrawable(getResources(), result);
ImageView imageView = (ImageView)findViewById(R.id.imageBlend1);
imageView.setImageDrawable(drawable);
// Apply -------------------------------
// Draw base
canvas.drawBitmap(img1, 0, 0, null);
// Draw overlay
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(Mode.MULTIPLY));
paint.setShader(new BitmapShader(img2, TileMode.CLAMP, TileMode.CLAMP));
canvas.drawRect(0, 0, img2.getWidth(), img2.getHeight(), paint);
这行得通,但我无法控制完成的乘法“数量”——它总是一个完整的乘法传输。理想情况下,0% 的乘法将与基本图像 (img1) 相同,没有任何更改,但 100% 的乘法将是我使用上面的代码得到的结果。
paint.setAlpha()
似乎对此不起作用。
还有其他方法可以设置新“图层”的不透明度百分比吗?
PS我猜有一些方法可以LightingColorFilter
通过预乘并将颜色偏移为白色来使乘法工作(使用a),但它对乘法模式非常具体..我正在尝试找到一种方法来应用不透明度/ % 也适用于所有其他传输模式。