2016-02-17 38 views
1

我目前正試圖圍繞iOS的CGColorSpace顏色管理API的當前狀態。在iOS 8.1 SDK之前(據我所知),在CGColorSpace.h中的許多函數&常量被標記爲__IPHONE_NA。但是,根據核心圖形的iOS 8.1 API Diffs,許多先前爲__IPHONE_NA的函數&已更新爲__IPHONE_2_0。那麼我們該怎麼解釋呢?iOS上的CGColorSpace API和顏色管理狀態?

我不認爲蘋果公司爲舊iOS版本追溯支持這些功能,而只是將這些功能的可見性從私有變爲公共。嘗試在不同的iOS版本&設備上使用某些功能時出現問題。例如:

CGColorSpaceRef sRgb = CGColorSpaceCreateWithName(kCGColorSpaceSRGB); // kCGColorSpaceSRGB is labeled __IPHONE_8_0 
CFDataRef profData = CGColorSpaceCopyICCProfile(...); 
  • 在iPad贈送(原始)運行iOS 8.2:sRgb & profData將是NULL。
  • 在運行iOS 8.3的iPad 3上:sRgb & profData將爲NULL。
  • 在運行iOS 9.2.1的iPhone 6 Plus上:sRgb將包含非NULL CGColorSpaceRefprofData將包含非NULL CFDataRef緩衝區。
  • 在運行iOS 9.2.1的iPad Mini(原)上:sRgb將包含非NULL CGColorSpaceRefprofData將包含非NULL CFDataRef緩衝區。

因此,至少對於iOS 8來說,這些函數似乎並沒有完全實現。對於iOS 9,似乎開始工作。

是否有任何文檔或資源描述這些API在iOS 8和iOS 9中如何更改?當CGColorSpaceCreateWithName(kCGColorSpaceSRGB)返回NULL時應該使用什麼顏色空間?在這種情況下,似乎CGColorSpaceCreateDeviceRGB()可能是唯一的選擇。

經過一些測試後,我發現可以從CGImageRef獲取嵌入的顏色配置文件,並使用該配置文件將顏色轉換應用到另一個顏色空間,只要您自己進行顏色轉換即可。 Core Graphics API仍然不支持在顏色空間之間轉換圖像,但是如果您有自己的顏色管理功能,現在可以在iOS上自己做 - 這是以前不可能的。

我只是想知道什麼是和不會工作。我嘗試瞭解發行說明,並尋找描述從iOS 7改爲8和8到9的技術說明,但我一直無法找到任何描述CGColorSpace API更改的內容。有誰知道是否有這樣的文件?

+0

提醒:如果您發現之一以下答案已解決/回答了您的問題,請將其標記爲已接受的答案! –

回答

0

您可以看看一個名爲little-CMS的開源庫。 它給你很好的結果,你可以集成到你的應用程序。

https://github.com/mm2/Little-CMS

+0

我熟悉Little CMS,並將其用於我們的應用程序Ho wever這個問題是專門針對用於顏色管理的原生iOS API的,而不是第三方庫可用的。 – Cutterpillow

1

你的研究結果是到iOS 9的ColorSync /沒有得到支持正確─現有CGColorSpace;假定所有圖像資產都在設備的sRGB色彩空間CGColorSpaceused to state 「iOS does not support ColorSync, so all assets should be provided in the native device color space: sRGB」的文檔中。

因此,即使CGColorSpace/CGColorSpaceRef存在於早期版本中,它在iOS 9.0之前不會執行任何操作。

所以,你有幾個選擇:

  1. 只支持iOS的9或更高版本。
  2. 在iOS 9+上使用適當的顏色空間渲染; iOS 8用戶將獲得不太準確的圖像顏色渲染。
  3. 使用第三方庫,如@SumitKumarSaha建議。

另外值得一提的是色彩空間精確的渲染已經成爲去年更大的交易或所謂的iPad的臨9.7" (2016),iPad的臨10.5" & 12.9" (2017年),iPhone 7個& 7個加(2016),並在所有使用顯示P3廣泛色彩空間的產品線較新的機型(根據DCI P3)

WWDC 2015 Session 510 - What's New in Core Image

更多信息