diff --git a/问题/颜色/颜色.md b/问题/颜色/颜色.md index b482ac0..154285e 100644 --- a/问题/颜色/颜色.md +++ b/问题/颜色/颜色.md @@ -5,7 +5,7 @@ 一.简单介绍颜色 二.几种创建或定义颜色的方式 三.推荐取色工具 -四.详解颜色混合模式(即Alpha通道相关) +四.颜色混合模式(Alpha通道相关) ``` ## 一.简单介绍颜色 @@ -76,7 +76,38 @@ RGB 从0x00到0xff表示颜色从浅到深。 ``` ## 三.取色工具 -话说颜色都是用RGB值定义的,而我们一般是无法 +颜色都是用RGB值定义的,而我们一般是无法直观的知道自己需要颜色的值,需要借用取色工具直接从图片或者其他地方获取颜色的RGB值。 + +### 1.屏幕取色工具 +取色调色工具,可以从屏幕取色或者使用调色板调制颜色,非常小而精简。 + +[点击这里获取屏幕取色工具](http://pan.baidu.com/s/1gdWkN0B) + +### 2.Picpick +功能更加强大的工具:PicPick。 + +PicPick具备了截取全屏、活动窗口、指定区域、固定区域、手绘区域功能,支持滚动截屏,屏幕取色,支持双显示器,具备白板、屏幕标尺、直角座标或极座标显示与测量,具备强大的图像编辑和标注功能。 + +[点击这里获取PicPick](http://ngwin.com/picpick) + +## 四.颜色混合模式(Alpha通道相关) +每个Color里可以有四个通道ARGB,其中RGB是红绿蓝,A即Alpha通道,它通常的作用是用来作为此颜色的透明度。 + +因为我们的显示屏是没法透明的,因此最终显示在屏幕上的颜色里可以认为没有Alpha通道。Alpha通道主要在两个图像混合的时候生效。 + +默认情况下,当一个颜色绘制到Canvas上时的混合模式是这样计算的:(RGB通道) 最终颜色 = 绘制的颜色 + (1 - 绘制颜色的透明度) × Canvas上的原有颜色。 + +注意: + +1.这里我们一般把每个通道的取值从0(ox00)到255(0xff)映射到0到1的浮点数表示。 + +2.这里等式右边的“绘制的颜色"、“Canvas上的原有颜色”都是经过预乘了自己的Alpha通道的值。如绘制颜色:0x88ffffff,那么参与运算时的每个颜色通道的值不是1.0,而是(1.0 * 0.5333 = 0.5333)。 (其中0.5333 = 0x88/0xff) + +使用这种方式的混合,就会造成后绘制的内容以半透明的方式叠在上面的视觉效果。 + +其实还可以有不同的混合模式供我们选择,用Paint.setXfermode,指定不同的PorterDuff.Mode。 + +下表是各个PorterDuff模式的混合计算公式:(D指原本在Canvas上的内容dst,S指绘制输入的内容src,a指alpha通道,c指RGB各个通道)