Multiplyのようなブレンディングモードを使用して、Androidで2つの画像をブレンドしようとしています。
// 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
)、事前に乗算して色を白にオフセットしますが、これは乗算モードに非常に固有です..不透明度を適用する方法を見つけようとしています/ %他のすべての転送モードにも当てはまります。