首页 > 解决方案 > 合并位图时如何忽略像素?

问题描述

这是我的合并代码

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

它是如何工作 的但我想在不覆盖黑色像素的情况下合并它。PS二维码图片不透明,二维码后面看不到绿色图片

标签: javaandroid

解决方案


最简单的方法是在绘制覆盖(绿色)位图时使用 Paint,但我不确定将哪个参数用作 PorterDuff.Mode(参考):

mergingPaint = new Paint();
mergingPaint..setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
canvas.drawBitmap(overlayBitmap, marginLeft, marginTop, mergingPaint);

但是,如果您已经尝试了所有值但没有成功,那么您必须在绘制最新的之前从叠加层(绿色像素)中减去黑色像素。脚步:

  1. 从 QRCode 位图中删除所有白色像素
  2. 将剩余的黑色像素减去绿色覆盖层(这样绿色区域内部就会有孔)
  3. 像往常一样绘制绿色叠加层

推荐阅读