Domanda

Ho un codice esistente che utilizza CMNewProfileSearch per trovare quindi scorrere i profili colore sul sistema ottenendo i loro nomi e percorsi completi. Sfortunatamente, CMNewProfileSearch è obsoleto in Mac OS X 10.5 ed è anche non disponibile durante la compilazione di un'applicazione a 64 bit.

Nel leggere il riferimento 2.5 ColorSync Manager, sembra che il nuovo modo di scorrere i profili colore installati sia utilizzare la funzione CMIterateColorSyncFolder .

  1. È vero?
  2. Esiste invece un modo Cocoa per fare ciò che voglio?
  3. Qualcuno ha qualche codice di esempio?

Grazie.

È stato utile?

Soluzione

  1. Sì. Come hai indicato, ColorSync Manager Reference dice il riferimento del gestore ColorSync seguenti:

    La funzione CMNewProfileSearch non sfrutta appieno il profilo ottimizzato ricerca disponibile a partire da ColorSync versione 2.5. Usa CMIterateColorSyncFolder invece.

  2. CMIterateColorSyncFolder è il modo ufficiale per farlo. Inoltre, è anche il modo ottimizzato .

  3. Da Codice di esempio ImageApp di Apple :

EDIT: ho modificato l'esempio di codice per rimuovere NewCMProfileIterateUPP e 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;
    }

Si scopre che non hanno bisogno di NewCMProfileIterateUPP e DisposeCMProfileIterateUPP quindi non sono stati sostituiti con nulla, per quanto posso dire. Invece, puoi definire la funzione di callback con una firma che corrisponde a profileIterate , sopra. È quindi possibile semplicemente passare la funzione di richiamata direttamente a CMIterateColorSyncFolder .

Ho testato le mie modifiche in ImageApp su Mac OS X 10.5 funziona come previsto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top