0

以下は私のプログラムと参考画像です。

プログラム :

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);

参考画像:

ここに画像の説明を入力

上記のプログラムを使用して、写真に明るい透明な赤色(アルファ付き)を追加しました。しかし、なぜ写真が真っ赤に変わったのかはよくわかりません。「理想の結果」は Photoshop で作られます。元の写真の前に赤いレイヤーを追加するだけです。そして、透明度を低くして乗算します。

それらは同じ処理概念ではありませんか、それとも私のプログラムに何か問題がありますか? Mode.MULTIPLY を使用して「理想的な結果」を作成することはできませんか? 誰か私に意見を言ってもらえますか?

ありがとう ありがとう どうもありがとう!

4

1 に答える 1

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とアルファを 95 にすると、要件により近いものが得られます。

結果:

ここに画像の説明を入力

于 2012-11-08T08:57:15.587 に答える