前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android高级渲染Xfermode

Android高级渲染Xfermode

作者头像
aruba
发布2020-07-03 11:06:12
6160
发布2020-07-03 11:06:12
举报
文章被收录于专栏:android技术android技术
Xfermode的作用是将绘制的图形的像素和Canvas上对应位置的像素按照一定的规则进行混合,形成新的像素,再更新到Canvas中形成最终的图形,使用的时候都是通过Paint.setXfermode
我们一个像素的颜色都是由四个分量组成,即ARGB,A表示的是我们Alpha值,RGB表示的是颜色
  • S表示的是原像素,原像素的值表示[Sa,Sc] Sa表示的就是源像素的Alpha值,Sc表示源像素的颜色值
  • D表示的是目标像素,目标像素的值表示[Da,Dc] Da表示的就是目标像素的Alpha值,Dc表示目标像素的颜色值
蓝色矩形表示的是原图片,黄色圆表示的是目标图片

Xfermode.png

混合模式分类
SRC类----优先显示的是源图片
  • SRC [Sa, Sc] ---- 处理图片相交区域时,总是显示的是原图片
  • SRC_IN [Sa * Da, Sc * Da] ---- 处理图片相交区域时,受到目标图片的Alpha值影响 当我们的目标图片为空白像素的时候,目标图片也会变成空白 简单的来说就是用目标图片的透明度来改变源图片的透明度和饱和度,当目标图片的透明度为0时,源图片就不会显示 示例:圆角头像 、倒影图片
  • SRC_OUT [Sa * (1 - Da), Sc * (1 - Da)] --- 同SRC_IN类似 (1 - Da) 用我们目标图片的透明度的补值来改变源图片的透明度和饱和度,当目标图片的透明度为不透明时,源图片就不会显示 示例:橡皮擦效果 目标图片 --- 手势的轨迹 源图片 --- 擦除的图片
  • SRC_ATOP [Da, Sc * Da + (1 - Sa) * Dc] ---- 当透明度为100%和0%时,SRC_IN 和 SRC_ATOP是通用的 当透明度不为上述的两个值时,SRC_ATOP 比 SRC_IN 源图像的饱和度会增加,变得更亮一些
DST类----优先显示的是目标图片
  • DST_IN [Sa * Da, Sa * Dc] ----- 对比一下SRC_IN,正好和我们SRC_IN相反,在相交的时候以源图片的透明度来改变目标图片的透明度和饱和度 当源图片的透明度为0的时候,目标图片完全不显示
其他的叠加效果
  • MULTIPLY[Sa * Da, Sc * Dc] --- 混合 应用:可以把图片的轮廓取出来
  • LIGHTEN -- 变亮 书架 头顶灯光变亮效果
掌握SRC_IN和SRC_OUT就足够使用了
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Xfermode的作用是将绘制的图形的像素和Canvas上对应位置的像素按照一定的规则进行混合,形成新的像素,再更新到Canvas中形成最终的图形,使用的时候都是通过Paint.setXfermode
    • 我们一个像素的颜色都是由四个分量组成,即ARGB,A表示的是我们Alpha值,RGB表示的是颜色
      • 蓝色矩形表示的是原图片,黄色圆表示的是目标图片
      • 混合模式分类
        • SRC类----优先显示的是源图片
          • DST类----优先显示的是目标图片
            • 其他的叠加效果
            • 掌握SRC_IN和SRC_OUT就足够使用了
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档