Frage

Ich habe vorhandenen Code, der CMNewProfileSearch verwendet die Farbprofile auf dem System zu finden, dann iterieren ihre Namen und vollständige Pfade zu bekommen. Leider CMNewProfileSearch ist in Mac OS X 10.5 veraltet und ist auch nicht verfügbar, wenn eine 64-Bit-Anwendung kompiliert wird.

ColorSync Manager 2.5 Reference Beim Lesen, es ist wie die neue Art und Weise scheint Profile Farbe installiert iterieren ist die CMIterateColorSyncFolder Funktion nutzen zu können.

  1. Ist das wahr?
  2. Sie hat eine Cocoa Art und Weise zu tun, was ich will statt?
  3. Hat jemand irgendeine Beispielcode?

Danke.

War es hilfreich?

Lösung

  1. Ja. Wie Sie erwähnt, sagt der ColorSync Manager Referenz folgendes ein:

    Die CMNewProfileSearch Funktion nimmt nicht alle Vorteile des optimierten Profil die Suche zur Verfügung, beginnend mit ColorSync Version 2.5. Verwenden CMIterateColorSyncFolder statt.

  2. CMIterateColorSyncFolder ist die offizielle Art und Weise, dies zu tun. Außerdem ist es auch die optimiert Art und Weise.

  3. Apples ImageApp Beispielcode :

EDIT:. Ich habe den Code Probe modifizierte NewCMProfileIterateUPP und DisposeCMProfileIterateUPP entfernen


    // 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;
    }

Es stellt sich heraus, dass nicht brauchen NewCMProfileIterateUPP und DisposeCMProfileIterateUPP so haben sie mit etwas nicht ersetzt worden ist, soweit ich das beurteilen kann. Stattdessen können Sie die Callback-Funktion mit einer Signatur definieren, die profileIterate übereinstimmt, siehe oben. Sie können dann übergeben Sie einfach die Callback-Funktion direkt an CMIterateColorSyncFolder.

Ich habe meine Änderungen getestet in ImageApp auf Mac OS X 10.5 funktioniert es wie erwartet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top