Замена CMNewProfileSearch на устаревший 64-битный код
У меня есть существующий код, который использует CMNewProfileSearch
затем найдите итерируйте цветовые профили в системе, получая их имена и полные пути. К несчастью, CMNewProfileSearch
устарела в Mac OS X 10.5 и недоступна при компиляции 64-битного приложения.
При чтении справочника ColorSync Manager 2.5 кажется, что новый способ перебора установленных цветовых профилей заключается в использовании CMIterateColorSyncFolder
функция.
- Это правда?
- Есть ли способ Какао сделать то, что я хочу вместо этого?
- У кого-нибудь есть пример кода?
Благодарю.
1 ответ
Да. Как вы указали, в справочнике ColorSync Manager говорится следующее:
Функция 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
,
Я проверил свои изменения в ImageApp на Mac OS X 10.5, он работает как положено.