It’s my merging code
JavaScript
x
private Bitmap bitmapOverlayToCenter(Bitmap bitmap1, Bitmap overlayBitmap) {
int bitmap1Width = bitmap1.getWidth();
int bitmap1Height = bitmap1.getHeight();
int bitmap2Width = overlayBitmap.getWidth();
int bitmap2Height = overlayBitmap.getHeight();
float marginLeft = (float) (bitmap1Width * 0.5 - bitmap2Width * 0.5);
float marginTop = (float) (bitmap1Height * 0.5 - bitmap2Height * 0.5);
Bitmap finalBitmap = Bitmap.createBitmap(bitmap1Width, bitmap1Height, bitmap1.getConfig());
Canvas canvas = new Canvas(finalBitmap);
canvas.drawBitmap(bitmap1, new Matrix(), null);
canvas.drawBitmap(overlayBitmap, marginLeft, marginTop, null);
return finalBitmap;
}
how it works But I want to merge it without overlay black pixels. P.S. qr-code image is not transparent, green image not visible behind qr
Advertisement
Answer
The easiest way is to use a Paint when drawing the overlay (green) Bitmap, but I’m not sure which parameter to use as PorterDuff.Mode (reference):
JavaScript
mergingPaint = new Paint();
mergingPaint..setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
canvas.drawBitmap(overlayBitmap, marginLeft, marginTop, mergingPaint);
But if you have already tried all values without success, then you have to subtract black pixels from the overlay (the green one) before draw this latest. Steps:
- remove all white pixels from QRCode Bitmap
- subtract remaining black pixels to the green overlay (in this way the green area will have holes inside it)
- draw the green overlay as usual