Ersetzen CMNewProfileSearch mit nicht veraltet, 64-Bit-Code
-
03-07-2019 - |
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.
- Ist das wahr?
- Sie hat eine Cocoa Art und Weise zu tun, was ich will statt?
- Hat jemand irgendeine Beispielcode?
Danke.
Lösung
-
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.
-
CMIterateColorSyncFolder
ist die offizielle Art und Weise, dies zu tun. Außerdem ist es auch die optimiert Art und Weise.
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.