2009-05-05 7 views
1

J'ai un code existant qui utilise CMNewProfileSearch pour trouver ensuite parcourir les profils de couleur sur le système en obtenant leurs noms et leurs chemins complets. Malheureusement, CMNewProfileSearch est obsolète dans Mac OS X 10.5 et est également indisponible lors de la compilation d'une application 64 bits. En lisant ColorSync Manager 2.5 Reference, il semble que la nouvelle méthode pour parcourir les profils de couleurs installés consiste à utiliser la fonction CMIterateColorSyncFolder.Remplacement de CMNewProfileSearch par du code 64 bits non obsolète

  1. Est-ce vrai?
  2. Existe-t-il une façon Cocoa de faire ce que je veux à la place?
  3. Quelqu'un at-il un code d'échantillon?

Merci.

Répondre

1
  1. Oui. Comme vous l'avez indiqué, le ColorSync Manager Reference indique ce qui suit:

    La fonction CMNewProfileSearch ne tire pas pleinement parti du profil optimisé disponible à partir de la version 2.5 de ColorSync. Utilisez plutôt CMIterateColorSyncFolder .

  2. CMIterateColorSyncFolder est le officiel pour ce faire. En outre, c'est aussi optimisé façon.

  3. De Apple's ImageApp sample code:

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 se avère que ne pas besoin NewCMProfileIterateUPP et DisposeCMProfileIterateUPP ils n'ont donc été remplacés par quoi que ce soit, pour autant que je peux dire. Au lieu de cela, vous pouvez définir la fonction de rappel avec une signature correspondant à profileIterate ci-dessus. Vous pouvez ensuite passer la fonction de rappel directement au CMIterateColorSyncFolder.

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

+0

Les fonctions NewCMProfileIterateUPP() et DisposeCMProfileIterateUPP() sont obsolètes dans Mac OS X 10.5. –

+0

Bon point. J'ai modifié l'exemple de code afin que NewCMProfileIterateUPP() et DisposeCMProfileIterateUPP() ne sont plus utilisés. J'espère que cela répond à tout pour vous. ;) – Naaff

Questions connexes