Paint方法总结(三):图层混合模式
2019-08-09 本文已影响0人
Fizzzzer
参考扔物线大神博客
离屏绘制
在介绍图层混合模式之前先简单的说一下Android的离屏绘制。离屏绘制就是图层绘制的一种缓冲策略,通过canvas.saveLayer()
将缓冲层保存起来,这个saveLayer会返回一个layerID
,把图层先绘制在缓冲层,然后通过canvas.restoreToCount(layerId)
恢复图层,将缓冲层的图像绘制在画布上。在进行图层混合演示的时候,要使用离屏绘制,因为如果直接在画布上进行图层混合的话,画布和画布的颜色也会加入到图层的混合策略中,这样会造成演示结果的偏差。
PorterDuff.Mode
PorterDuff.Mode
是用来指定两个图层共同绘制的时候的一个混合的策略,他是一个enum,不同的Mode可以指定不同的混合策略。最新的文档中,混合模式一共有18个所有的图层混合模式的效果都是作用于源图像上的
效果图就直接上官方文档吧
源图像和目标图像:
![](https://img.haomeiwen.com/i5676870/cd791d0947ba046d.jpg)
Mode.ADD
源图像与目标图像进行相加
![](https://img.haomeiwen.com/i5676870/3f24eac78924b38a.png)
Mode. CLEAR
源图像被清空,不被显示出来
![](https://img.haomeiwen.com/i5676870/f41fdf755c71826e.png)
Mode. DARKEN
保留源图像和目标图像较小的组建(官方解释,我不是很懂)
![](https://img.haomeiwen.com/i5676870/c244900c03b9f58a.png)
Mode. DST
源像素被丢弃,而目标保持不变
![](https://img.haomeiwen.com/i5676870/42c97494f8f53eba.png)
Mode. DST_ATOP
丢弃源像素未覆盖的目标像素。在源像素上绘制剩余的目标像素。
![](https://img.haomeiwen.com/i5676870/082f4b68927e63d6.png)
Mode.DST_IN
保留覆盖源像素的目标像素,丢弃剩余的源像素和目标像素。
![](https://img.haomeiwen.com/i5676870/10a266ce1873b468.png)
Mode.DST_OUT
显示目标图像没有被源图像覆盖的地方
![](https://img.haomeiwen.com/i5676870/244537a7c3ec017a.png)
Mode. DST_OVER
源像素绘制在目标像素后面
![](https://img.haomeiwen.com/i5676870/87790265292d2365.png)
Mode. LIGHTEN
保留源和目标像素的最大组件。(官方解释,很懵)
![](https://img.haomeiwen.com/i5676870/a0df56b6fe9a2d95.png)
Mode. MULTIPLY
将源像素和目标像素相乘
![](https://img.haomeiwen.com/i5676870/df30ff00174546fb.png)
Mode. OVERLAY
根据目标颜色复制或筛选源和目标
![](https://img.haomeiwen.com/i5676870/da320935d4080287.png)
Mode. SCREEN
根据目标颜色复制或筛选源和目标
![](https://img.haomeiwen.com/i5676870/c9412b25eff06b3d.png)
Mode. SRC
源像素替换目标像素
![](https://img.haomeiwen.com/i5676870/ad6c415483912a13.png)
Mode. SRC_ATOP
丢弃不覆盖目标像素的源像素。在目标像素上绘制剩余的源像素。
![](https://img.haomeiwen.com/i5676870/416f8d9327335446.png)
Mode. SRC_IN
保留覆盖目标像素的源像素,丢弃剩余的源像素和目标像素。
![](https://img.haomeiwen.com/i5676870/36e2810443353591.png)
Mode. SRC_OUT
保持源像素不覆盖目标像素。丢弃覆盖目标像素的源像素。丢弃所有目标像素
![](https://img.haomeiwen.com/i5676870/165498721334333e.png)
Mode. SRC_OVER
源像素绘制在目标像素上
![](https://img.haomeiwen.com/i5676870/9e5383e97beef0a3.png)
Mode. XOR
丢弃源像素和目标像素,其中源像素覆盖目标像素。绘制剩余的源像素
![](https://img.haomeiwen.com/i5676870/27094cfca3792400.png)