Reemplazo de CMNewProfileSearch con código de 64 bits no en desuso
-
03-07-2019 - |
Pregunta
Tengo un código existente que utiliza CMNewProfileSearch
para encontrar y luego iterar sobre los perfiles de color en el sistema obteniendo sus nombres y rutas completas. Desafortunadamente, CMNewProfileSearch
está en desuso en Mac OS X 10.5 y tampoco está disponible al compilar una aplicación de 64 bits.
Al leer la referencia de ColorSync Manager 2.5, parece que la nueva forma de iterar sobre los perfiles de color instalados es usar la función CMIterateColorSyncFolder
.
- ¿Es eso cierto?
- ¿Hay una forma de Cocoa de hacer lo que quiero en su lugar?
- ¿Alguien tiene algún código de muestra?
Gracias.
Solución
-
Sí. Como indicó, el ColorSync Manager Reference
La función CMNewProfileSearch no aprovecha al máximo el perfil optimizado Búsqueda disponible a partir de ColorSync versión 2.5. Utilice CMIterateColorSyncFolder en su lugar.
CMIterateColorSyncFolder
es la manera oficial de hacer esto. Además, también es la forma optimizada .
EDITAR: He modificado el ejemplo de código para eliminar NewCMProfileIterateUPP
y 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;
}
Resulta que no necesitan NewCMProfileIterateUPP
y DisposeCMProfileIterateUPP
por lo que no han sido reemplazados por nada, por lo que puedo decir. En su lugar, puede definir la función de devolución de llamada con una firma que coincida con profileIterate
, arriba. Luego puede pasar la función de devolución de llamada directamente a CMIterateColorSyncFolder
.
He probado mis cambios en ImageApp en Mac OS X 10.5 funciona como se esperaba.