1

我有现有的代码用于CMNewProfileSearch查找然后迭代系统上的颜色配置文件,以获取它们的名称和完整路径。不幸的是,CMNewProfileSearch在 Mac OS X 10.5 中已弃用,并且在编译 64 位应用程序时也不可用。

在阅读 ColorSync Manager 2.5 Reference 时,似乎迭代已安装颜色配置文件的新方法是使用该CMIterateColorSyncFolder功能。

  1. 真的吗?
  2. 有没有一种可可的方式来做我想做的事?
  3. 有人有任何示例代码吗?

谢谢。

4

1 回答 1

1
  1. 是的。正如您所指出的,ColorSync 管理器参考说明如下:

    CMNewProfileSearch 功能没有充分利用从 ColorSync 2.5 版开始提供的优化配置文件搜索。请改用 CMIterateColorSyncFolder。

  2. CMIterateColorSyncFolder是执行此操作的官方方法。此外,这也是优化的方式。

  3. 来自Apple 的 ImageApp 示例代码

编辑:我已修改代码示例以删除NewCMProfileIterateUPPDisposeCMProfileIterateUPP.


    // Callback routine with a description of a profile that is 
    // called during an iteration through the available profiles.
    //
    static OSErr profileIterate (CMProfileIterateData *info, void *refCon)
    {
        NSMutableArray* array = (NSMutableArray*) refCon;

        Profile* prof = [Profile profileWithIterateData:info];
        if (prof)
            [array addObject:prof];

        return noErr;
    }

    // return an array of all profiles
    //
    + (NSArray*) arrayOfAllProfiles
    {
        NSMutableArray* profs=[[NSMutableArray arrayWithCapacity:0] retain];
        CMIterateColorSyncFolder(profileIterate, NULL, 0L, profs);
        return (NSArray*)profs;
    }

事实证明,不需要NewCMProfileIterateUPPDisposeCMProfileIterateUPP所以据我所知,它们没有被任何东西取代。相反,您可以使用与上述匹配的签名来定义回调函数profileIterate。然后,您可以直接将回调函数传递给CMIterateColorSyncFolder.

I've tested my changes in ImageApp on Mac OS X 10.5 it it works as expected.

于 2009-05-05T02:15:27.663 回答