非推奨の64ビットコードでCMNewProfileSearchを置き換える
-
03-07-2019 - |
質問
CMNewProfileSearch
を使用してシステム上のカラープロファイルを検索し、その名前とフルパスを取得する既存のコードがあります。残念ながら、 CMNewProfileSearch
はMac OS X 10.5では非推奨であり、64ビットアプリケーションのコンパイル時には使用できません。
ColorSync Manager 2.5リファレンスを読んで、インストールされたカラープロファイルを反復処理する新しい方法は、 CMIterateColorSyncFolder
関数を使用することのようです。
- それは本当ですか?
- 代わりに、私がやりたいことをするCocoaの方法はありますか?
- サンプルコードはありますか?
ありがとう。
解決
-
はい。ご指摘のとおり、 ColorSync Manager Reference は、次:
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で ImageApp の変更をテストしました期待どおりに動作します。