将两个图像与乘法和%不透明度混合在一起

zeh*_*zeh 9 android blending porter-duff

我正在尝试使用类似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);
Run Code Online (Sandbox Code Playgroud)

这是有效的,但是我无法控制所做的乘法"量" - 它始终是一个完全的乘法传递.理想情况下,0%乘法与基本图像(img1)相同而没有任何变化,但100%乘法将是我得到的上述代码的结果.

paint.setAlpha() 似乎不适用于此.

设置新"图层"的%不透明度的其他任何方法?

PS有一些方法可以LightingColorFilter通过预乘和将颜色偏移到白色来实现与此相乘(使用a ),但它非常特定于乘法模式...我正试图找到一种方法来应用不透明度/所有其他传输模式也是%.

Mar*_*sis 3

不久前我需要做类似的事情,我发现这篇关于颜色通道的文章很有启发性。(但恐怕这与你在“PS”中描述的内容有关)

上面的链接位于 archive.org,感谢 @1j01