java - 合并位图时如何忽略像素?
问题描述
这是我的合并代码
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二维码图片不透明,二维码后面看不到绿色图片
解决方案
最简单的方法是在绘制覆盖(绿色)位图时使用 Paint,但我不确定将哪个参数用作 PorterDuff.Mode(参考):
mergingPaint = new Paint();
mergingPaint..setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
canvas.drawBitmap(overlayBitmap, marginLeft, marginTop, mergingPaint);
但是,如果您已经尝试了所有值但没有成功,那么您必须在绘制最新的之前从叠加层(绿色像素)中减去黑色像素。脚步:
- 从 QRCode 位图中删除所有白色像素
- 将剩余的黑色像素减去绿色覆盖层(这样绿色区域内部就会有孔)
- 像往常一样绘制绿色叠加层
推荐阅读
- c# - 处理两个不同的应用程序流
- swift4.2 - 如何在 swift 4.2 中屏蔽字符串
- javascript - redux 重新选择带有分配的胖箭头函数参数
- javascript - 为全球所有商店创建从上午 9 点开始的促销活动
- c# - 从 .NET 控制台应用程序优雅地(和受控地)退出
- c# - 如何在 Redis 中创建持久票证
- macos - 是否可以在双击期间抑制单击事件?
- c++ - 进行如此复杂的 C++ 类设计的目的是什么?
- jsonschema - 即使缺少必填字段,Rapidjson 也会成功验证
- python - 在 Pandas DataFrame 中的 Python 中以毫秒为单位将 UTC 时间转换为纪元的有效方法