gpt4 book ai didi

Android使用PorterDuff合并图片

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:20 25 4
gpt4 key购买 nike

所以我根本不了解 PorterDuff 及其各种模式。我有两张图像要合并,一张是航拍图像,另一张是 alpha 蒙版,用于叠加在航拍上,因此只有某些部分显示出来。我目前有一个系统,我可以在其中正确地将蒙版覆盖到只有它通过的其他图像上,但问题是在这种情况下我必须有背景颜色并且我需要它是透明的。 (类似于这里的问题 Efficient Bitmap masking with black and white alpha mask in Android )

Bitmap thumbnail = Bitmap.createBitmap(mThumbnailSize, mThumbnailSize, Config.ARGB_8888);
Canvas canvas = new Canvas(thumbnail);

Paint paint = new Paint();
paint.setFilterBitmap(true);
canvas.drawColor(Color.TRANSPARENT);
canvas.drawBitmap(aerial, transformation, paint);

paint = new Paint();
paint.setFilterBitmap(true);
paint.setColorFilter(new PorterDuffColorFilter(Color.WHITE,PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(overlay, transformation, paint);

我觉得我已经尝试了 ColorFilter、XferMode 的所有组合,甚至以相反的顺序绘制图像,但似乎没有任何效果。我觉得我完全误解了 PorterDuff 模式的工作原理(我的很多信息都基于 http://ssp.impulsetrain.com/porterduff.html )。

如果有人对如何实现这一点有任何见解,对我应该使用哪种 PorterDuff 模式有任何见解,我是否应该使用 ColorFilter 或 XferMode,我将非常感激。

提前致谢

最佳答案

可能是我来晚了,但解决方案是使背景透明,这样您就可以得到您已经知道如何使用的 alpha 蒙版。这是将黑白图像转换为 alpha 蒙版的 CSharp 辅助方法。

private static Bitmap ConvertToAlphaMask(Bitmap mask)
{
float[] src = {
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0.3f, 0.59f, 0.11f, 0, 0,
};

var colorMatrix = new ColorMatrix(src);
var filter = new ColorMatrixColorFilter(colorMatrix);
var maskPaint = new Paint();
maskPaint.SetColorFilter(filter);

var alphaMask = Bitmap.CreateBitmap(mask.Width, mask.Height, Bitmap.Config.Argb8888);
var canvas = new Canvas(alphaMask);
canvas.DrawBitmap(mask, 0, 0, maskPaint);

return alphaMask;
}

关于Android使用PorterDuff合并图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22430517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com