当使用从CGColorSpaceCreateDeviceRGB()返回的色彩空间时,色彩空间转换将应用于任何CGContextDrawImage()调用,与不进行此转换的blitting相比,性能降低5-6倍。
为了避免这种色彩空间转换,我们一直在使用通过系统监视器配置文件创建的色彩空间:
CMProfileRef smp = 0;
if (CMGetSystemProfile(&smp) == noErr)
{
colorSpace = CGColorSpaceCreateWithPlatformColorSpace(smp);
CMCloseProfile(smp);
}
else
colorSpace = CGColorSpaceCreateDeviceRGB();
Run Code Online (Sandbox Code Playgroud)
上面的方法效果很好,并且完全禁用了CGContextDrawImage()的颜色空间转换。
从10.6开始,CMGetSystemProfile已被标记为已弃用,但是由于我们没有找到其他避免这些色彩空间转换的可能性,因此我们将其保留在代码中以实现高性能打印。
在10.11 SDK中,删除了ColorSpace API CMGetSystemProfile()。是否有合适的替代品,或关于如何禁用色彩空间转换的替代方法?