[英]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()。 是否有合適的替代品,或關於如何禁用色彩空間轉換的替代方法?
為了回答我自己的問題,
我最終使用的解決方案是使用CGDisplayCopyColorSpace和CGMainDisplayID函數從主顯示ID中獲取顏色空間:
colorSpace = ::CGDisplayCopyColorSpace(::CGMainDisplayID());
if (!colorSpace)
colorSpace = CGColorSpaceCreateDeviceRGB();
這在10.11 SDK中可用,並將創建一個顏色空間,該顏色空間可避免通過調用CGContextDrawImage()進行顏色空間轉換。
使用Instruments分析調用棧將顯示與我們之前使用的代碼相同的調用棧。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.