簡體   English   中英

划線時避免顏色空間轉換,Mac OS X 10.11 SDK

[英]Avoiding colorspace transformations when blitting, Mac OS X 10.11 SDK

當使用從CGColorSpaceCreateDeviceRGB()返回的色彩空間時,色彩空間轉換將應用於任何CGContextDrawImage()調用,與不使用該轉換的blitting相比,性能降低5-6倍。

為了避免這種色彩空間轉換,我們一直在使用通過系統監視器配置文件創建的色彩空間:

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

上面的方法效果很好,並且完全禁用了CGContextDrawImage()的顏色空間轉換。

從10.6開始,CMGetSystemProfile被標記為不推薦使用,但是由於我們沒有找到避免這些色彩空間轉換的任何其他可能性,因此我們將其保留在代碼中以實現高性能打印。

在10.11 SDK中,刪除了ColorSpace API CMGetSystemProfile()。 是否有合適的替代品,或關於如何禁用色彩空間轉換的替代方法?

為了回答我自己的問題,

我最終使用的解決方案是使用CGDisplayCopyColorSpaceCGMainDisplayID函數從主顯示ID中獲取顏色空間:

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

if (!colorSpace)
    colorSpace = CGColorSpaceCreateDeviceRGB();

這在10.11 SDK中可用,並將創建一個顏色空間,該顏色空間可避免通過調用CGContextDrawImage()進行顏色空間轉換。

使用Instruments分析調用棧將顯示與我們之前使用的代碼相同的調用棧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM