Quartz 2D之Color and Color Spaces

设备(显示器,打印机,扫描仪,相机)有着不处理颜色相同的方式,每个都有自己的颜色范围。在一个设备上产生的颜色可能无法在另一个设备上产生。

为了高效的利用Quartz2D方法处理颜色,你需要足够熟悉颜色管理概述:Color Management Overview.这里面详细介绍了颜色的概念,色值,设备特性以及设备色彩空间,颜色匹配问题,渲染意向,颜色管理模块,还有ColorSync.

本章,你将学习Quartz2D是如何表示颜色和色彩空间的,以及alpha组分是到底是什么。本章也将讨论:

(1)Create color spaces  

(2)Create and set colors

(3)Set rendering intent

About Color and Color Spaces 关于色彩空间

Quartz中的一个颜色代表着色值。色彩空间是用来解释颜色信息的,如果没有色彩空间,色值是没有意义的。下表4-1展示了所有颜色。但是如果不知道色彩空间以及每个色彩空间允许的变化范围,你不可能了解到每种颜色代表着什么。


   HSB:组分 有 色调 饱和度 以及亮度

   RGB:组分有  红 绿 蓝

   CMYK:组分有 青  品红  黄色 黑色

   BGR:组分有蓝色 绿色 红色

The Alpha Value 透明度

透明度也是图形状态的一部分;

在正常模式下,默认的图形状态,Quartz将源颜色与目表颜色通过下面的公式来计算透明度:destination = (alpha * source) + (1 - alpha) * destination

您可以提供一个α值作为接受颜色的所有例程的最后一个颜色分量,也可以设置全局透明度使用CGContextSetAlpha方法。需要注意的是当你都设置了,全局透明度要乘以 透明度。

为了使一个页面完全透明,你可以明确的清除上下文的透明度使用CGContextClearRect方法,当你的上下文是一个窗口或者一个位图的时候。当你想为一张图片创建一个透明的遮盖时或者使一个窗口的背景透明都可以这样做。

Creating Color Spaces 创建颜色空间

Quartz 支持用于设备独立的颜色空间的颜色管理系统的标准颜色空间,也支持通用的,索引,模式颜色空间。设备独立的颜色是可以移植的。设备独立的的颜色空间被用来从一个设备到一个设备之间颜色的转换。在设备独立的颜色空间中的颜色在不同的设备上是相同的,在设备允许的范围内。基于这个原因,设备独立的颜色空间是展示颜色的最佳选择。

应用中如果有精确的颜色要求应该使用设备独立的颜色空间。一个常见的设备独立空间是通用的颜色空间。通用的颜色空间让操作系统为您的应用程序提供最佳的颜色空间。绘制的和你打印的看起来是一样的。

切记:ios 不支持设备独立或者通用的色彩空间,ios 应用必须使用device color spaces。

  所以设备独立或者通用的色彩空间就不多说明了。说下ios 使用的设备色彩空间。

    Creating Device Color Spaces 创建设备色彩空间。

  设备的颜色空间主要是被iOS应用使用是因为其他的不可用。在多数情况下Mac OS X使用的是通用的而不是创建设备色彩空间。然而一些Quartz程序期望具有设备色彩空间的图形。举个例子,你可以调用CGImageCreateWithMask然后指定一个图像作为遮盖,图像必须用设备灰色空间定义。可以用来创建一个设备颜色空间的方法有以下几个:

        CGColorSpaceCreateDeviceGray for a device-dependent grayscale color space. //灰度颜色空间

        CGColorSpaceCreateDeviceRGB for a device-dependent RGB color space.//RGB颜色空间

        CGColorSpaceCreateDeviceCMYK for a device-dependent CMYK color space.//CMYK颜色空间

Setting and Creating Colors  设置并且创建颜色

Quartz提供了一些列可以方法可以设置填充颜色, 描边颜色,颜色空间以及透明度,这些参数都是图形状态的一部分,这就意味着你设置一次的时候,接下来的这些设置会一直保存直到你设置为别的值。下图4-4中,左边的是用CMYK填充的蓝色,右边是用RGB填充的颜色。你会看到很大的不同在这两种颜色之间。理论上是相同的,但只有在RGB颜用于RBG的设备同时CMYK颜色用于CMYK的设备才会出现相同的效果。

 

你可以使用方法CGContextSetFillColorSpaceCGContextSetStrokeColorSpace去填充或者描边颜色空间,你也可以使用下表中的便利方法中的一个,这些方法都是设备颜色空间。


你可以指定描边或者填充颜色的色值用来进行描边或者填充。例如,一个完全饱和的红色可以指定为四个数字的数组:(1,0,0,1)。前三个指定纯红色,没有绿色和蓝色,最后一个表示透明度。

当你在应用程序中要循环利用这些颜色的时候,最便捷的就是创建一个CGColor对象进行描边或者填充。CGColor你只需要传递一个参数给这个两个方法:CGContextSetFillColorWithColor和CGContextSetStrokeColorWithColor,你可以保持这个对象当你需要使用它的时候。你可以提高应用程序的执行能力通过使用CGColor。你可以创建一个CGColor对象通过调用方法CGColorCreate,传入一个CGColorspace对象和一组浮点数用来指定色值。最后一个组分指定透明度。

Setting Rendering Intent 设置渲染意向

绘制意图指定了Quartz如何从原色空间映射到图形上下文的颜色空间。如果没有显式设置渲染意图,Quartz使用相对比色的渲染意图除了位图。Quartz会使用感知渲染的意图。

为了设置渲染意图,调用CGContextSetRenderingIntent,同时传入一个上下文参数和下面的一个常数。

   kCGRenderingIntentDefault.//使用上下文默认的渲染意图

  kCGRenderingIntentAbsoluteColorimetric.//将输出设备色域以外的颜色映射到最接近匹配于输出设备色域内的颜色,这可以产生一个裁剪效果,其中在色域的图形上下文的两个不同的颜色值被映射在输出设备的色域,是相同的颜色。当上下文是源地和目的地的色域时,这是最佳的选择。

   kCGRenderingIntentRelativeColorimetric.//相对比色转换了所有的颜色去解释上下文白点和输出设备白点 之间的差异。

  kCGRenderingIntentPerceptual.//通过压缩图形上下文的色域以适应在输出设备的色域范围,保留颜色之间的视觉关系。感知意图对于照片和其他复杂的图片是适合的。

  kCGRenderingIntentSaturation.//当将颜色转换成输出设备的色域时,保持颜色的相对饱和值。其结果是一个明亮的,饱和的颜色的图像。饱和意图对于降低图像的低等细节是适合的,比如展示图标和图形。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容