首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓使用PorterDuff组合图片

安卓使用PorterDuff组合图片
EN

Stack Overflow用户
提问于 2014-03-16 06:23:19
回答 1查看 1.4K关注 0票数 5

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

代码语言:javascript
复制
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,任何我都会非常感激的。

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2016-10-04 21:08:56

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

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22430517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档