使用未弃用的 64 位代码替换 CMNewProfileSearch
-
03-07-2019 - |
题
我有现有的代码使用 CMNewProfileSearch
查找然后迭代系统上的颜色配置文件,获取它们的名称和完整路径。很遗憾, CMNewProfileSearch
在 Mac OS X 10.5 中已弃用,并且在编译 64 位应用程序时也不可用。
在阅读 ColorSync Manager 2.5 参考时,迭代已安装的颜色配置文件的新方法似乎是使用 CMIterateColorSyncFolder
功能。
- 真的吗?
- 有没有一种可可的方式来做我想做的事?
- 有人有示例代码吗?
谢谢。
解决方案
是的。正如您所指出的, ColorSync 管理器参考 说如下:
CMNewProfilesearch函数无法完全利用以Colorsync版本2.5开头的优化配置文件搜索。改用CMITERATECOLORSYNCFOLDER。
CMIterateColorSyncFolder
是个 官方的 方法来做到这一点。除此之外,这也是 优化 方式。
编辑:我修改了代码示例以删除 NewCMProfileIterateUPP
和 DisposeCMProfileIterateUPP
.
// 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;
}
事实证明不需要 NewCMProfileIterateUPP
和 DisposeCMProfileIterateUPP
所以据我所知,它们还没有被任何东西取代。相反,您可以使用匹配的签名来定义回调函数 profileIterate
, , 多于。然后你可以直接将回调函数传递给 CMIterateColorSyncFolder
.
我已经测试了我的更改 图像应用程序 在 Mac OS X 10.5 上它按预期工作。
不隶属于 StackOverflow