首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免闪烁时的颜色空间转换,MacOSX10.11SDK

避免闪烁时的颜色空间转换,MacOSX10.11SDK
EN

Stack Overflow用户
提问于 2015-10-12 07:33:19
回答 1查看 431关注 0票数 3

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

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

代码语言:javascript
复制
CMProfileRef smp = 0;
if (CMGetSystemProfile(&smp) == noErr)
{
    colorSpace = CGColorSpaceCreateWithPlatformColorSpace(smp);
    CMCloseProfile(smp);
}
else
    colorSpace = CGColorSpaceCreateDeviceRGB();

上面的操作很好,并且完全禁用了CGContextDrawImage()的颜色空间转换。

自10.6以来,CMGetSystemProfile已被标记为“不推荐”,但由于我们没有发现任何其他可能避免这些颜色空间转换,所以我们将其保留在代码中,以便进行高性能闪存。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-12 08:49:23

回答我自己的问题,

我最后使用的解决方案是使用CGDisplayCopyColorSpaceCGMainDisplayID函数,从主显示ID获取颜色空间。

代码语言:javascript
复制
colorSpace = ::CGDisplayCopyColorSpace(::CGMainDisplayID());

if (!colorSpace)
    colorSpace = CGColorSpaceCreateDeviceRGB();

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

通过分析仪器调用堆栈,可以看到一个与我们之前使用的代码相同的调用堆栈。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33075557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档