之前发了一篇关于如何在iPhone中使用渐变的文章,忽然想起来本站并没有相关介绍颜色的文章。这里简单介绍一下如何取CGColor的颜色值,最好你对色彩的构成有一点基础,如果会用Photoshop就更好了,因为本文内容中会掺杂有一点Photoshop的知识。这篇文章的内容同时支持Mac与iPhone。
要在屏幕上显示颜色,通常需要使用RGB去表示。R表示红、G表示绿、B表示蓝。CMYK也是用于表示颜色的方法,但是由于CMYK是用于印刷,因此RGB范畴内的颜色有一些是无法用CMYK表示的(比如比较亮的萤光色)。它们之间的差别主要是RGB表示的是发光物体的颜色(屏幕本身是发光直射到眼睛的),而CMYK表示的是反射光(比如纸上的图,是别的物体比如太阳或者灯发光,通过它反射到我们眼睛里,我们才看到颜色)。这里面比较深入的内容如果你有兴趣请你去搜索。
如果你了解一点web上取颜色的方法,你应该知道web中颜色的数值是这样表示的:
#FFCC00 表示一种亮黄色,前两位FF是红色分量,CC是绿色分量,00是蓝色分量。00表示黑,也就是没有这个颜色,FF表示这个颜色的最大值。这个数字越小越暗(屏幕不发光),越大越亮(光越强)。
通过Core Library的文档,我们知道创建颜色有这么几个方法:
CGColorCreate
CGColorCreateCopy
CGColorCreateGenericGray
CGColorCreateGenericRGB
CGColorCreateGenericCMYK
CGColorCreateCopyWithAlpha
CGColorCreateWithPattern
再来看一下CGColorCreate:
CGColorRef CGColorCreate (
CGColorSpaceRef colorspace,
const CGFloat components[]
);
我们通过CGColorCreate就可以创建颜色。既然我们要用RGB表示颜色,那么colorspace这个参数我们就可以使用CGColorSpaceCreateDeviceRGB(),而我们主要来探讨components这个参数。
这个参数是一个数组,带有4个数值:
float color[]={红色分量, 绿色分量, 蓝色分量, alpha分量};
这4个数值都是0-1区间,0表示黑(不发光),数字越大这种颜色的光线越强,alpha分量表示透明度。比如{1.0, 0, 0,1.0}就是纯红色而且完全不透明。
纯红、纯绿、纯蓝很简单,可是如何在程序中使用我想要的其他颜色呢?
比如我想使用渐变创建下面这幅图,我先用Photoshop选两个颜色,把它画出来:
用Photoshop取色的比较简单的方法是先按热键B,选择画笔,然后按住option(Windows版是alt),鼠标指针就变成了吸管。在需要取色的地方按一下,当前颜色就设置成了鼠标位置上的颜色。
我们就得到了这两个不同的蓝色。
点一下工具条上的当前色,拾色器就出来了:
我们可以看到比较浅的这个蓝色的RGB数值是:174,201,255。
那么我们需要的CGColor的颜色是什么呢?就是{174/255, 201/255, 255/255, 1.0} 因为Photoshop中RGB颜色的范畴是0-255,我们只需要做一下除法就可以了。
结果就是
float lightblue[]={0.6824f, 0.7882f, 1.0f, 1.0f};
同理,深一点的那个蓝色的值
就是 {0, 58/255, 163/255, 1.0},也就是
float darkblue[]={0.0f, 0.2275f, 0.6392f, 1.0f};
这样一来,你就可以用CGColor在程序中画出任何你想要的颜色了。