Sostituzione di CMNewProfileSearch con codice a 64 bit non deprecato
-
03-07-2019 - |
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
.
- È vero?
- Esiste invece un modo Cocoa per fare ciò che voglio?
- Qualcuno ha qualche codice di esempio?
Grazie.
Soluzione
-
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.
CMIterateColorSyncFolder
è il modo ufficiale per farlo. Inoltre, è anche il modo ottimizzato .
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.