现在,如果不推荐使用ColorSync Manager API中的所有内容,如何找到显示配置文件

时间:2015-03-20 16:51:48

标签: macos cocoa deprecated color-management

我正在升级已经使用ColorSync Manager API获取附加显示的颜色配置文件的OS X应用。当API中的所有内容都被标记为已弃用时,写作大约在OS X 10.6上。很长一段时间,它仍然可以#include <ColorSyncDeprecated.h>,但在最新的SDK中不再可能。

该应用已经使用Little CMS实际操作色彩空间,所以我不需要太多。如上所述,它使用ColorSync的唯一方法是使用CMGetSystemProfileNCMGetProfileLocation来获取主要显示的配置文件。

有几个问题与此有些相关,但它们已经存在了几年,并且没有解决问题:

现在在任何OS X Framework中是否有 任何 替代方案,或Apple是否认定没有人想知道其显示的配置文件?< / p>

4 个答案:

答案 0 :(得分:2)

The new ColorSync API is defined in
/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers

in
    ColorSync.h
    ColorSyncBase.h
    ColorSyncCMM.h
    ColorSyncDeprecated.h
    ColorSyncDevice.h
    ColorSyncProfile.h
    ColorSyncTransform.h

and wasn't documented anywhere by Apple the last time I looked.

他们似乎忘了宣布

CFUUIDRef CGDisplayCreateUUIDFromDisplayID (uint32_t displayID);

我没有找到任何方法来确定使用当前OS X API的配置文件的位置,因此不得不对它们进行硬编码:

#define COLORSYNC_DIR_NETWORK   "/Network/Library/ColorSync/Profiles/"
#define COLORSYNC_DIR_SYSTEM    "/System/Library/ColorSync/Profiles/"
#define COLORSYNC_DIR_LOCAL     "/Library/ColorSync/Profiles/"
#define COLORSYNC_DIR_USER      "/Library/ColorSync/Profiles/"

答案 1 :(得分:1)

您可以使用CoreGraphice API

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

然后,api喜欢:

CGColorSpaceCopyICCData    

你可以做一些颜色同步的事情。我认为这很可能是你想用旧的ColorSync API做的。

答案 2 :(得分:0)

这就是我为获取已知直接显示ID的配置文件路径所做的工作。

  1. 包括新的ColorSync框架,因为10.13它不再在ApplicationServices中了
  2. 使用CGDisplayCreateUUIDFromDisplayID将显示ID转换为UUID
  3. 使用回调调用ColorSyncIterateDeviceProfiles
  4. 将为每个设备调用回调,您将获得一个字典作为参数,其中包含设备上的信息,UUID,URL,名称......
  5. 我将我的UUID与字典中的UUID进行比较,如果我找到匹配,我从字典中复制URL并返回false以停止迭代,如果不是,则返回true以获取下一个设备的回调

答案 3 :(得分:0)

Apple当前的文档页面未将ColorSync Manager标记为已弃用。一些数据类型和方法是,但大多数没有这样的指示。也许它已被预先准备好了?

ColorSync Manager pages