Замена CMNewProfileSearch на не устаревший 64-разрядный код

StackOverflow https://stackoverflow.com/questions/822945

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть существующий код, который использует CMNewProfileSearch чтобы найти, затем выполните итерацию по цветовым профилям в системе, получая их имена и полные пути.К сожалению, CMNewProfileSearch устарел в Mac OS X 10.5, а также недоступен при компиляции 64-разрядного приложения.

При чтении ссылки ColorSync Manager 2.5 создается впечатление, что новый способ перебора установленных цветовых профилей заключается в использовании CMIterateColorSyncFolder функция.

  1. Это правда?
  2. Есть ли способ Cocoa сделать то, что я хочу вместо этого?
  3. У кого-нибудь есть какой-нибудь пример кода?

Спасибо.

Это было полезно?

Решение

  1. ДА.Как вы указали, Ссылка на менеджер ColorSync говорит следующее:

    Функция CMNewProfileSearch не использует в полной мере преимущества оптимизированного профиля поиск доступен, начиная с ColorSync версии 2.5.Используйте CMIterateColorSyncFolder вместо этого.

  2. CMIterateColorSyncFolder является ли официальный способ сделать это.Кроме того, это также оптимизированный образом.

  3. От Пример кода ImageApp от Apple:

Редактировать:Я изменил пример кода, чтобы удалить 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 это работает так, как ожидалось.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top