Замена CMNewProfileSearch на устаревший 64-битный код - PullRequest
1 голос
/ 05 мая 2009

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

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

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

Спасибо.

1 Ответ

1 голос
/ 05 мая 2009
  1. Да. Как вы указали, Справочник ColorSync Manager говорит следующее:

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

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

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

РЕДАКТИРОВАТЬ: я изменил пример кода, чтобы удалить 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 - все работает, как и ожидалось.

...