Quartz 2D之Color and Color Spaces

設(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)相同的效果罐脊。

?

你可以使用方法CGContextSetFillColorSpaceCGContextSetStrokeColorSpace去填充或者描邊顏色空間,你也可以使用下表中的便利方法中的一個(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)和圖形。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掀淘,一起剝皮案震驚了整個(gè)濱河市旬蟋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌革娄,老刑警劉巖倾贰,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拦惋,居然都是意外死亡匆浙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門厕妖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來首尼,“玉大人,你說我怎么就攤上這事∪砟埽” “怎么了迎捺?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長查排。 經(jīng)常有香客問我凳枝,道長,這世上最難降的妖魔是什么雹嗦? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任范舀,我火速辦了婚禮,結(jié)果婚禮上了罪,老公的妹妹穿的比我還像新娘锭环。我一直安慰自己,他們只是感情好泊藕,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布辅辩。 她就那樣靜靜地躺著,像睡著了一般娃圆。 火紅的嫁衣襯著肌膚如雪玫锋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天讼呢,我揣著相機(jī)與錄音撩鹿,去河邊找鬼。 笑死悦屏,一個(gè)胖子當(dāng)著我的面吹牛节沦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播础爬,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼甫贯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了看蚜?” 一聲冷哼從身側(cè)響起叫搁,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎供炎,沒想到半個(gè)月后渴逻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡音诫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年裸卫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纽竣。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡墓贿,死狀恐怖茧泪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情聋袋,我是刑警寧澤队伟,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站幽勒,受9級特大地震影響嗜侮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜啥容,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一锈颗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咪惠,春花似錦击吱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至炭臭,卻和暖如春永脓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鞋仍。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工常摧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人威创。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓落午,卻偏偏與公主長得像,于是被迫代替她去往敵國和親那婉。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容