2015-10-12 53 views
2

使用從CGColorSpaceCreateDeviceRGB()返回的色彩空間時,將對任何CGContextDrawImage()調用應用色彩空間轉換,導致比沒有此轉換時的blitting效果差5-6倍。在blitting時避免進行色彩空間轉換,Mac OS X 10.11 SDK

爲了避免這種色彩空間轉換,我們一直在使用該系統顯示器配置文件創建的色彩空間:

CMProfileRef smp = 0; 
if (CMGetSystemProfile(&smp) == noErr) 
{ 
    colorSpace = CGColorSpaceCreateWithPlatformColorSpace(smp); 
    CMCloseProfile(smp); 
} 
else 
    colorSpace = CGColorSpaceCreateDeviceRGB(); 

上述工作良好,完全禁止使用的色彩空間轉換爲CGContextDrawImage()。

CMGetSystemProfile已經標誌着自10.6過時,但由於我們還沒有發現任何其他的可能性,以避免這些色彩空間轉換,我們一直在我們的代碼爲高性能的blitting。

在10.11 SDK中,ColorSpace API CMGetSystemProfile()被刪除。有沒有合適的替換方法,或者有關如何禁用顏色空間轉換的替代方法?

+0

只是我2美分。使用漏斗發現下面的電話是什麼,並打開Apple TSI門票以供選擇。這是一個非常專業化的問題,但我期待着回答(如果你有問題的話)。 –

回答

4

要回答我的問題,

,我結束了使用是得到從主顯示屏ID的色彩空間,使用功能的解決方案CGDisplayCopyColorSpaceCGMainDisplayID

colorSpace = ::CGDisplayCopyColorSpace(::CGMainDisplayID()); 

if (!colorSpace) 
    colorSpace = CGColorSpaceCreateDeviceRGB(); 

這是可使用10.11 SDK,並創建一個colorspace,通過調用CGContextDrawImage()來避免顏色空間轉換。

使用Instruments分析調用堆棧會顯示與我們以前使用的代碼相同的調用堆棧。