Question

J'ai un code existant qui utilise CMNewProfileSearch pour rechercher, puis parcourir les profils de couleur sur le système, en obtenant leurs noms et leurs chemins d'accès complets. Malheureusement, CMNewProfileSearch est obsolète dans Mac OS X 10.5 et n'est également pas disponible lors de la compilation d'une application 64 bits.

Lors de la lecture de la référence ColorSync Manager 2.5, il semble que la nouvelle méthode d'itération sur les profils de couleur installés consiste à utiliser la fonction CMIterateColorSyncFolder .

  1. Est-ce vrai?
  2. Existe-t-il un moyen Cocoa de faire ce que je veux à la place?
  3. Quelqu'un a-t-il un exemple de code?

Merci.

Était-ce utile?

La solution

  1. Oui. Comme vous l'avez indiqué, le ColorSync Manager Reference suivant:

    La fonction CMNewProfileSearch ne tire pas pleinement parti du profil optimisé. recherche disponible à partir de ColorSync version 2.5. Utiliser CMIterateColorSyncFolder au lieu de cela.

  2. CMIterateColorSyncFolder est la manière officielle de le faire. En outre, c’est aussi la méthode optimisée .

  3. De exemple de code ImageApp d’Apple :

EDIT: j'ai modifié l'exemple de code pour supprimer NewCMProfileIterateUPP et 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;
    }

Il s'avère qu'il n'est pas nécessaire que NewCMProfileIterateUPP et DisposeCMProfileIterateUPP soient remplacés par rien, pour autant que je sache. Au lieu de cela, vous pouvez définir la fonction de rappel avec une signature qui correspond à profileIterate , ci-dessus. Vous pouvez ensuite simplement passer la fonction de rappel directement à CMIterateColorSyncFolder .

J'ai testé mes modifications dans ImageApp sous Mac OS X 10.5. cela fonctionne comme prévu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top