Замена CMNewProfileSearch на не устаревший 64-разрядный код
-
03-07-2019 - |
Вопрос
У меня есть существующий код, который использует CMNewProfileSearch
чтобы найти, затем выполните итерацию по цветовым профилям в системе, получая их имена и полные пути.К сожалению, CMNewProfileSearch
устарел в Mac OS X 10.5, а также недоступен при компиляции 64-разрядного приложения.
При чтении ссылки ColorSync Manager 2.5 создается впечатление, что новый способ перебора установленных цветовых профилей заключается в использовании CMIterateColorSyncFolder
функция.
- Это правда?
- Есть ли способ Cocoa сделать то, что я хочу вместо этого?
- У кого-нибудь есть какой-нибудь пример кода?
Спасибо.
Решение
ДА.Как вы указали, Ссылка на менеджер ColorSync говорит следующее:
Функция CMNewProfileSearch не использует в полной мере преимущества оптимизированного профиля поиск доступен, начиная с ColorSync версии 2.5.Используйте CMIterateColorSyncFolder вместо этого.
CMIterateColorSyncFolder
является ли официальный способ сделать это.Кроме того, это также оптимизированный образом.
Редактировать:Я изменил пример кода, чтобы удалить NewCMProfileIterateUPP
и 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;
}
Получается, что не нужно NewCMProfileIterateUPP
и DisposeCMProfileIterateUPP
так что, насколько я могу судить, они ничем не были заменены.Вместо этого вы можете определить функцию обратного вызова с подписью, которая соответствует profileIterate
, выше.Затем вы можете просто передать функцию обратного вызова непосредственно в CMIterateColorSyncFolder
.
Я протестировал свои изменения в Приложение для создания изображений в Mac OS X 10.5 это работает так, как ожидалось.