Я пытаюсь смешать два изображения вместе с Android, используя режим смешивания, подобный Multiply.
// 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 ()
, похоже, для этого не работает.
Есть ли другой способ установить% непрозрачности нового «слоя»?
P.S. Есть несколько способов заставить умножение работать с этим, я полагаю (используя LightingColorFilter
) путем предварительного умножения и смещения цвета на белый, но это очень специфично для мультипликативного режима .. Я пытаюсь найти способ применить параметр непрозрачности /% и ко всем другим режимам передачи.