Paint方法总结(三):图层混合模式

参考扔物线大神博客

离屏绘制

在介绍图层混合模式之前先简单的说一下Android的离屏绘制。离屏绘制就是图层绘制的一种缓冲策略,通过canvas.saveLayer()将缓冲层保存起来,这个saveLayer会返回一个layerID,把图层先绘制在缓冲层,然后通过canvas.restoreToCount(layerId)恢复图层,将缓冲层的图像绘制在画布上。在进行图层混合演示的时候,要使用离屏绘制,因为如果直接在画布上进行图层混合的话,画布和画布的颜色也会加入到图层的混合策略中,这样会造成演示结果的偏差。

PorterDuff.Mode

PorterDuff.Mode 是用来指定两个图层共同绘制的时候的一个混合的策略,他是一个enum,不同的Mode可以指定不同的混合策略。最新的文档中,混合模式一共有18个所有的图层混合模式的效果都是作用于源图像上的

效果图就直接上官方文档吧

源图像和目标图像:

Paint方法总结(三):图层混合模式_第1张图片
源图像 & 目标图像
Mode.ADD

源图像与目标图像进行相加

Paint方法总结(三):图层混合模式_第2张图片
composite_ADD.png
Mode. CLEAR

源图像被清空,不被显示出来

Paint方法总结(三):图层混合模式_第3张图片
composite_CLEAR.png
Mode. DARKEN

保留源图像和目标图像较小的组建(官方解释,我不是很懂)

Paint方法总结(三):图层混合模式_第4张图片
composite_DARKEN.png
Mode. DST

源像素被丢弃,而目标保持不变

Paint方法总结(三):图层混合模式_第5张图片
composite_DST.png
Mode. DST_ATOP

丢弃源像素未覆盖的目标像素。在源像素上绘制剩余的目标像素。

Paint方法总结(三):图层混合模式_第6张图片
composite_DST_ATOP.png
Mode.DST_IN

保留覆盖源像素的目标像素,丢弃剩余的源像素和目标像素。

Paint方法总结(三):图层混合模式_第7张图片
composite_DST_IN.png
Mode.DST_OUT

显示目标图像没有被源图像覆盖的地方

Paint方法总结(三):图层混合模式_第8张图片
composite_DST_OUT.png
Mode. DST_OVER

源像素绘制在目标像素后面

Paint方法总结(三):图层混合模式_第9张图片
composite_DST_OVER.png
Mode. LIGHTEN

保留源和目标像素的最大组件。(官方解释,很懵)

Paint方法总结(三):图层混合模式_第10张图片
composite_LIGHTEN.png
Mode. MULTIPLY

将源像素和目标像素相乘

Paint方法总结(三):图层混合模式_第11张图片
composite_MULTIPLY.png
Mode. OVERLAY

根据目标颜色复制或筛选源和目标

Paint方法总结(三):图层混合模式_第12张图片
composite_OVERLAY.png
Mode. SCREEN

根据目标颜色复制或筛选源和目标

Paint方法总结(三):图层混合模式_第13张图片
composite_SCREEN.png
Mode. SRC

源像素替换目标像素

Paint方法总结(三):图层混合模式_第14张图片
composite_SRC.png
Mode. SRC_ATOP

丢弃不覆盖目标像素的源像素。在目标像素上绘制剩余的源像素。

Paint方法总结(三):图层混合模式_第15张图片
composite_SRC_ATOP.png
Mode. SRC_IN

保留覆盖目标像素的源像素,丢弃剩余的源像素和目标像素。

Paint方法总结(三):图层混合模式_第16张图片
composite_SRC_IN.png
Mode. SRC_OUT

保持源像素不覆盖目标像素。丢弃覆盖目标像素的源像素。丢弃所有目标像素

Paint方法总结(三):图层混合模式_第17张图片
composite_SRC_OUT.png
Mode. SRC_OVER

源像素绘制在目标像素上

Paint方法总结(三):图层混合模式_第18张图片
composite_SRC_OVER.png
Mode. XOR

丢弃源像素和目标像素,其中源像素覆盖目标像素。绘制剩余的源像素

Paint方法总结(三):图层混合模式_第19张图片
composite_XOR.png

你可能感兴趣的:(Paint方法总结(三):图层混合模式)