質問

CMNewProfileSearch を使用してシステム上のカラープロファイルを検索し、その名前とフルパスを取得する既存のコードがあります。残念ながら、 CMNewProfileSearch はMac OS X 10.5では非推奨であり、64ビットアプリケーションのコンパイル時には使用できません。

ColorSync Manager 2.5リファレンスを読んで、インストールされたカラープロファイルを反復処理する新しい方法は、 CMIterateColorSyncFolder 関数を使用することのようです。

  1. それは本当ですか?
  2. 代わりに、私がやりたいことをするCocoaの方法はありますか?
  3. サンプルコードはありますか?

ありがとう。

役に立ちましたか?

解決

  1. はい。ご指摘のとおり、 ColorSync Manager Reference は、次:

    CMNewProfileSearch関数は、最適化されたプロファイルを最大限に活用しません ColorSyncバージョン2.5以降の検索が可能です。 CMIterateColorSyncFolderを使用する 代わりに。

  2. CMIterateColorSyncFolder は、これを行う公式の方法です。また、最適化方法でもあります。

  3. AppleのImageAppサンプルコードから:

編集:コードサンプルを変更して、 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 の変更をテストしました期待どおりに動作します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top