設(shè)備(顯示器,打印機(jī),掃描儀买喧,相機(jī))有著不處理顏色相同的方式,每個(gè)都有自己的顏色范圍匆赃。在一個(gè)設(shè)備上產(chǎn)生的顏色可能無法在另一個(gè)設(shè)備上產(chǎn)生淤毛。
為了高效的利用Quartz2D方法處理顏色,你需要足夠熟悉顏色管理概述:Color Management Overview.這里面詳細(xì)介紹了顏色的概念算柳,色值低淡,設(shè)備特性以及設(shè)備色彩空間,顏色匹配問題,渲染意向蔗蹋,顏色管理模塊何荚,還有ColorSync.
本章,你將學(xué)習(xí)Quartz2D是如何表示顏色和色彩空間的猪杭,以及alpha組分是到底是什么餐塘。本章也將討論:
(1)Create color spaces??
(2)Create and set colors
(3)Set rendering intent
About Color and Color Spaces 關(guān)于色彩空間
Quartz中的一個(gè)顏色代表著色值。色彩空間是用來解釋顏色信息的皂吮,如果沒有色彩空間戒傻,色值是沒有意義的。下表4-1展示了所有顏色蜂筹。但是如果不知道色彩空間以及每個(gè)色彩空間允許的變化范圍稠鼻,你不可能了解到每種顏色代表著什么。
?? HSB:組分 有 色調(diào) 飽和度 以及亮度
?? RGB:組分有? 紅 綠 藍(lán)
?? CMYK:組分有 青? 品紅? 黃色 黑色
?? BGR:組分有藍(lán)色 綠色 紅色
The Alpha Value 透明度
透明度也是圖形狀態(tài)的一部分狂票;
在正常模式下,默認(rèn)的圖形狀態(tài)熙暴,Quartz將源顏色與目表顏色通過下面的公式來計(jì)算透明度:destination = (alpha * source) + (1 - alpha) * destination
您可以提供一個(gè)α值作為接受顏色的所有例程的最后一個(gè)顏色分量闺属,也可以設(shè)置全局透明度使用CGContextSetAlpha方法。需要注意的是當(dāng)你都設(shè)置了周霉,全局透明度要乘以 透明度掂器。
為了使一個(gè)頁面完全透明,你可以明確的清除上下文的透明度使用CGContextClearRect方法俱箱,當(dāng)你的上下文是一個(gè)窗口或者一個(gè)位圖的時(shí)候国瓮。當(dāng)你想為一張圖片創(chuàng)建一個(gè)透明的遮蓋時(shí)或者使一個(gè)窗口的背景透明都可以這樣做。
Creating Color Spaces 創(chuàng)建顏色空間
Quartz 支持用于設(shè)備獨(dú)立的顏色空間的顏色管理系統(tǒng)的標(biāo)準(zhǔn)顏色空間狞谱,也支持通用的乃摹,索引,模式顏色空間跟衅。設(shè)備獨(dú)立的顏色是可以移植的孵睬。設(shè)備獨(dú)立的的顏色空間被用來從一個(gè)設(shè)備到一個(gè)設(shè)備之間顏色的轉(zhuǎn)換。在設(shè)備獨(dú)立的顏色空間中的顏色在不同的設(shè)備上是相同的伶跷,在設(shè)備允許的范圍內(nèi)掰读。基于這個(gè)原因叭莫,設(shè)備獨(dú)立的顏色空間是展示顏色的最佳選擇蹈集。
應(yīng)用中如果有精確的顏色要求應(yīng)該使用設(shè)備獨(dú)立的顏色空間。一個(gè)常見的設(shè)備獨(dú)立空間是通用的顏色空間雇初。通用的顏色空間讓操作系統(tǒng)為您的應(yīng)用程序提供最佳的顏色空間拢肆。繪制的和你打印的看起來是一樣的。
切記:ios 不支持設(shè)備獨(dú)立或者通用的色彩空間,ios 應(yīng)用必須使用device color spaces善榛。
? 所以設(shè)備獨(dú)立或者通用的色彩空間就不多說明了辩蛋。說下ios 使用的設(shè)備色彩空間。
? ? Creating Device Color Spaces 創(chuàng)建設(shè)備色彩空間移盆。
? 設(shè)備的顏色空間主要是被iOS應(yīng)用使用是因?yàn)槠渌牟豢捎玫吭骸T诙鄶?shù)情況下Mac OS X使用的是通用的而不是創(chuàng)建設(shè)備色彩空間。然而一些Quartz程序期望具有設(shè)備色彩空間的圖形咒循。舉個(gè)例子据途,你可以調(diào)用CGImageCreateWithMask然后指定一個(gè)圖像作為遮蓋,圖像必須用設(shè)備灰色空間定義叙甸∮币剑可以用來創(chuàng)建一個(gè)設(shè)備顏色空間的方法有以下幾個(gè):
? ? ? ? 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? 設(shè)置并且創(chuàng)建顏色
Quartz提供了一些列可以方法可以設(shè)置填充顏色, 描邊顏色裆蒸,顏色空間以及透明度熔萧,這些參數(shù)都是圖形狀態(tài)的一部分,這就意味著你設(shè)置一次的時(shí)候僚祷,接下來的這些設(shè)置會一直保存直到你設(shè)置為別的值佛致。下圖4-4中,左邊的是用CMYK填充的藍(lán)色辙谜,右邊是用RGB填充的顏色俺榆。你會看到很大的不同在這兩種顏色之間。理論上是相同的装哆,但只有在RGB顏用于RBG的設(shè)備同時(shí)CMYK顏色用于CMYK的設(shè)備才會出現(xiàn)相同的效果罐脊。
?
你可以使用方法CGContextSetFillColorSpace和CGContextSetStrokeColorSpace去填充或者描邊顏色空間,你也可以使用下表中的便利方法中的一個(gè)蜕琴,這些方法都是設(shè)備顏色空間萍桌。
你可以指定描邊或者填充顏色的色值用來進(jìn)行描邊或者填充。例如凌简,一個(gè)完全飽和的紅色可以指定為四個(gè)數(shù)字的數(shù)組:(1梗夸,0,0号醉,1)反症。前三個(gè)指定純紅色,沒有綠色和藍(lán)色畔派,最后一個(gè)表示透明度铅碍。
當(dāng)你在應(yīng)用程序中要循環(huán)利用這些顏色的時(shí)候,最便捷的就是創(chuàng)建一個(gè)CGColor對象進(jìn)行描邊或者填充线椰。CGColor你只需要傳遞一個(gè)參數(shù)給這個(gè)兩個(gè)方法:CGContextSetFillColorWithColor和CGContextSetStrokeColorWithColor胞谈,你可以保持這個(gè)對象當(dāng)你需要使用它的時(shí)候。你可以提高應(yīng)用程序的執(zhí)行能力通過使用CGColor。你可以創(chuàng)建一個(gè)CGColor對象通過調(diào)用方法CGColorCreate烦绳,傳入一個(gè)CGColorspace對象和一組浮點(diǎn)數(shù)用來指定色值卿捎。最后一個(gè)組分指定透明度。
Setting Rendering Intent 設(shè)置渲染意向
繪制意圖指定了Quartz如何從原色空間映射到圖形上下文的顏色空間径密。如果沒有顯式設(shè)置渲染意圖午阵,Quartz使用相對比色的渲染意圖除了位圖。Quartz會使用感知渲染的意圖享扔。
為了設(shè)置渲染意圖底桂,調(diào)用CGContextSetRenderingIntent,同時(shí)傳入一個(gè)上下文參數(shù)和下面的一個(gè)常數(shù)惧眠。
?? kCGRenderingIntentDefault.//使用上下文默認(rèn)的渲染意圖
? kCGRenderingIntentAbsoluteColorimetric.//將輸出設(shè)備色域以外的顏色映射到最接近匹配于輸出設(shè)備色域內(nèi)的顏色籽懦,這可以產(chǎn)生一個(gè)裁剪效果来累,其中在色域的圖形上下文的兩個(gè)不同的顏色值被映射在輸出設(shè)備的色域思喊,是相同的顏色。當(dāng)上下文是源地和目的地的色域時(shí)响驴,這是最佳的選擇秀存。
?? kCGRenderingIntentRelativeColorimetric.//相對比色轉(zhuǎn)換了所有的顏色去解釋上下文白點(diǎn)和輸出設(shè)備白點(diǎn) 之間的差異拖云。
? kCGRenderingIntentPerceptual.//通過壓縮圖形上下文的色域以適應(yīng)在輸出設(shè)備的色域范圍,保留顏色之間的視覺關(guān)系应又。感知意圖對于照片和其他復(fù)雜的圖片是適合的。
? kCGRenderingIntentSaturation.//當(dāng)將顏色轉(zhuǎn)換成輸出設(shè)備的色域時(shí)乏苦,保持顏色的相對飽和值株扛。其結(jié)果是一個(gè)明亮的,飽和的顏色的圖像汇荐。飽和意圖對于降低圖像的低等細(xì)節(jié)是適合的洞就,比如展示圖標(biāo)和圖形。