Android Xfermode

       Xfermode图片混合模式,为什么会有这个东西呢,其实可以类比photoshow的图层,好的不知道。再来,也就是假设我们要在某个图纸上画画,左手画圆,右手画方。然后它们要是互不相干,那自然皆大欢喜,但是如果有相交重叠的部分,如何处理这就是Xfermode要处理的东西了。先上一张图。这张是你选择的这种混合模式应该出现的效果,但可能并不是这么理想,往下看~
在这里插入图片描述
       具体的描述如下(建议自己在使用的时候多尝试一下):
(黄色的圆为目标图像,蓝色矩形为源图像)
ADD:饱和相加,对图像饱和度进行相加,不常用
  CLEAR:清除图像
  DARKEN:变暗,较深的颜色覆盖较浅的颜色,若两者深浅程度相同则混合
  DST:只显示目标图像
  DST_ATOP:在源图像和目标图像相交的地方绘制【目标图像】,在不相交的地方绘制【源图像】,相交处的效果受到源图像和目标图像alpha的影响
  DST_IN:只在源图像和目标图像相交的地方绘制【目标图像】,绘制效果受到源图像对应地方透明度影响
  DST_OUT:只在源图像和目标图像不相交的地方绘制【目标图像】,在相交的地方根据源图像的alpha进行过滤,源图像完全不透明则完全过滤,完全透明则不过滤
  DST_OVER:将目标图像放在源图像上方
  LIGHTEN:变亮,与DARKEN相反,DARKEN和LIGHTEN生成的图像结果与Android对颜色值深浅的定义有关
  MULTIPLY:正片叠底,源图像素颜色值乘以目标图像素颜色值除以255得到混合后图像像素颜色值
  OVERLAY:叠加
  SCREEN:滤色,色调均和,保留两个图层中较白的部分,较暗的部分被遮盖
  SRC:只显示源图像
  SRC_ATOP:在源图像和目标图像相交的地方绘制【源图像】,在不相交的地方绘制【目标图像】,相交处的效果受到源图像和目标图像alpha的影响
  SRC_IN:只在源图像和目标图像相交的地方绘制【源图像】
  SRC_OUT:只在源图像和目标图像不相交的地方绘制【源图像】,相交的地方根据目标图像的对应地方的alpha进行过滤,目标图像完全不透明则完全过滤,完全透明则不过滤
  SRC_OVER:将源图像放在目标图像上方
  XOR:在源图像和目标图像相交的地方之外绘制它们,在相交的地方受到对应alpha和色值影响,如果完全不透明则相交处完全不绘制。

       好了,上面的文字和图看看也就是了,实际使用的时候并不会那么的符合,根据具体情况再进行一些调整,如果想完全实现预期的样式,需要满足以下条件。
       1、关闭硬件加速。(硬件加速对PorterDuffXferMode有影响,使用前请关闭硬件加速,构造器中setLayerType(View.LAYER_TYPE_SOFTWARE, null);)
       2、两个bitmap的大小尽量一样。(有看到说只对bitmap有效,但是不一定待研究)
       3、背景色为透明色。
这里有篇比较详细的分析https://juejin.im/entry/57f875d6bf22ec00648464b8

       Xfermode常用于结合canvas,绘制蒙层等方面,实际效果可能于文章描述不相符还需要大家多多尝试,来分析原因。

参考资料
https://juejin.im/entry/58b0fc19570c35006963ef6e

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值