C++ Mac OS X 10.11 SDK在blitting时避免颜色空间转换

C++ Mac OS X 10.11 SDK在blitting时避免颜色空间转换,c++,macos,core-graphics,xcode7,osx-elcapitan,C++,Macos,Core Graphics,Xcode7,Osx Elcapitan,使用从CGColorSpaceCreateDeviceRGB()返回的颜色空间时,将对任何CGContextDrawImage()调用应用颜色空间转换,导致性能比不使用此转换的blitting差5-6倍 为了避免这种颜色空间转换,我们一直在使用系统监视器配置文件创建的颜色空间: CMProfileRef smp = 0; if (CMGetSystemProfile(&smp) == noErr) { colorSpace = CGColorSpaceCreateWithPlat

使用从CGColorSpaceCreateDeviceRGB()返回的颜色空间时,将对任何CGContextDrawImage()调用应用颜色空间转换,导致性能比不使用此转换的blitting差5-6倍

为了避免这种颜色空间转换,我们一直在使用系统监视器配置文件创建的颜色空间:

CMProfileRef smp = 0;
if (CMGetSystemProfile(&smp) == noErr)
{
    colorSpace = CGColorSpaceCreateWithPlatformColorSpace(smp);
    CMCloseProfile(smp);
}
else
    colorSpace = CGColorSpaceCreateDeviceRGB();
上述方法效果良好,完全禁用了CGContextDrawImage()的颜色空间转换

CMGetSystemProfile自10.6以来就被标记为不推荐使用,但由于我们还没有发现任何其他避免这些颜色空间转换的可能性,因此我们将其保留在代码中以实现高性能的blitting


在10.11 SDK中,颜色空间API CMGetSystemProfile()被删除。关于如何禁用颜色空间转换,是否有合适的替代方法或替代方法?

回答我自己的问题

我最终使用的解决方案是使用以下函数和从主显示ID获取颜色空间:

这在10.11 SDK中可用,并将创建一个颜色空间,通过调用CGContextDrawImage()避免颜色空间转换


使用Instruments分析调用堆栈会显示一个调用堆栈,它与我们之前使用的代码相同

只要我的2美分。使用hopper发现潜在的呼叫,并打开Apple TSI票证寻找替代方案。这是一个非常专业的问题,但我期待着答案(如果你有答案的话)。我正是有这个问题。上面的代码在哪里使用?抱歉,如果这是个愚蠢的问题。请看,我通过搜索影响性能的可疑调试函数找到了您的问题。(我的第二个问题)非常感谢!
colorSpace = ::CGDisplayCopyColorSpace(::CGMainDisplayID());

if (!colorSpace)
    colorSpace = CGColorSpaceCreateDeviceRGB();