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 .

  1. ¿Es eso cierto?
  2. ¿Hay una forma de Cocoa de hacer lo que quiero en su lugar?
  3. ¿Alguien tiene algún código de muestra?

Gracias.

¿Fue útil?

Solución

  1. 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.

  2. CMIterateColorSyncFolder es la manera oficial de hacer esto. Además, también es la forma optimizada .

  3. De código de muestra de ImageApp de Apple :

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top