2013-04-11 141 views
0

我延伸NSColor添加類方法NSColor顯示在屏幕不同的顏色

+ (NSColor*) initWithHTMLString: (NSString*) rgb 

我設置背景色爲NSWindow對象:

[self.window setBackgroundColor:[NSColor initWithHTMLString:@"37854F"]] 
NSLog(@"Color=%@",[self.window.backgroundColor toHTMLRGB]); 

當運行該程序時,日誌行是"Color=37854F"。但是,我使用PixelStick工具來刪除顏色像素,像素顏色不是37854F,顏色分量略小於其原點。

是否有任何人知道解決的辦法?

+0

什麼是'toHTMLRGB'?什麼是你的'initWithHTMLString:'的代碼? PixelStick說它是什麼顏色? – matt 2013-04-11 01:21:54

+2

此外,考慮「設備」與「校準」色彩空間(請參閱顏色編程主題」,在文檔指南) – 2013-04-11 01:29:38

+0

@馬特toHTMLRGB formrat NSColor來的NSString,initWithHTMLString:剛剛切斷兩個字節,並更改爲unsigned int類型,使用colorWithCalibratedRed:綠:藍:阿爾法:。創建新的NSColor對象 – teddy 2013-04-11 04:51:07

回答

2

的原因不同的是,用OBJ-C創建的顏色被調整,以當前的顏色配置文件顧及(參見系統偏好 - >顯示器 - >色)。這樣做到目前爲止,當您有多個顯示器並將正在運行的應用程序從一臺顯示器拖到另一臺顯示器時,相同顏色的顯示會有所不同不幸的是,即使使用colorWithDeviceRed:Green:Blue:Alpha代替colorWithCalibratedRed:Green:Blue:Alpha,在特定顯示器上使用精確的顏色也非常困難。

色覺是一個複雜的問題和各種輸出設備發揮重要的作用,所以難怪有沒有1:1的映射。但是,如果兩者都在同一臺顯示器上運行,應該可以創建一種顏色(例如在繪畫應用程序或顏色管理應用程序,設計器應用程序等中)並在Cocoa中重新創建完全相同的顏色。

有趣的是,當你在OSX上的設計(無論是在瀏覽器或PDF文件或其他)的設計中使用它的顏色,並在虛擬機中的Windows應用程序中使用它的組件值(例如Parallels Desktop),您可以像任何屏幕顏色選擇器顯示的一樣重現確切的顏色。

[更新]:由於系統顏色配置文件設置爲一個通用的一個解決了色彩匹配它可能是值得我們思考在這個technical Q&A

[更新]描述在代碼中創建一個自己的通用的色彩空間:我只是發現另一個NSColor消息,看起來像是我們都在尋找:

NSColor colorWithSRGBRed:green:blue:alpha 

在一些測試中,我可以看到顏色是確切的。不幸的是,這條消息僅適用於10.7及更高版本。

+0

你的信息是有用的,但它不是我的情況下我的情況是在同一個顯示器。我用HTML RGB串它是從Java程序挑選,並把我的Mac OS X應用程序,當我在運行同一個監視器的兩個應用(Java + MAC),它們是不同的。 – teddy 2013-04-11 08:24:34

+0

這就是我說的。再次閱讀。您正在Obj-C代碼中創建顏色,當它顯示在屏幕上時,它的顏色與您從中獲取組件值的java程序的顏色不同。 – 2013-04-11 09:00:43

+0

我們如何使NSColor與當前顯示配置文件無關? – teddy 2013-04-11 13:29:55

0

這是你如何初始化一個NSColor具有精確的屏幕色彩(SWIFT 3):

let components = [red, green, blue, alpha] 

let color = NSColor(
    colorSpace: NSScreen.main()!.colorSpace!, 
    components: components, 
    count: 4) 

如果顏色選擇一個截圖可以確認RGB分量完全匹配。