2015-03-20 2 views
2

Я обновляю приложение OS X, которое использовало ColorSync Manager API для получения профилей цветов для подключенных дисплеев. Письмо было на стене около OS X 10.6, когда все в API было отмечено устаревшим. Долгое время все еще можно было #include <ColorSyncDeprecated.h>, но в последних SDK, которые больше не возможны.Как найти профили отображения теперь, когда все в API-интерфейсе ColorSync устарело?

Приложение уже использует Little CMS для фактического управления цветовыми пространствами, поэтому мне не нужно многого. Как я заметил выше, единственное, что использует ColorSync for, - это получить профиль основного дисплея с использованием CMGetSystemProfile и NCMGetProfileLocation.

Есть несколько вопросов, которые несколько связанных с этим, но они несколько лет в настоящее время и не решают проблему:

  • Deprecated ColorSync Manager Functions: предлагает использовать Маленький CMS, чтобы иметь дело с цветом управление; не предлагает альтернативы для поиска профилей системы.
  • Replacing CMNewProfileSearch with non-deprecated, 64-bit code: спросил шесть лет назад, в 2009 году; рекомендует использовать функции, которые теперь также устарели.

Есть любой альтернативы этому сейчас в любом OS X Framework, или имеет Apple, просто решил, что никто не должен когда-либо хочет знать, профиль их отображение?

ответ

1
The new ColorSync API is defined in 
/System/Library/Frameworks/ApplicationServices.framework/Frameworks/ColorSync.framework/Headers 

in 
    ColorSync.h 
    ColorSyncBase.h 
    ColorSyncCMM.h 
    ColorSyncDeprecated.h 
    ColorSyncDevice.h 
    ColorSyncProfile.h 
    ColorSyncTransform.h 

and wasn't documented anywhere by Apple the last time I looked. 

Они, кажется, забыли объявить

CFUUIDRef CGDisplayCreateUUIDFromDisplayID (uint32_t displayID); 

, а также.

я не нашел каких-либо средств определения местоположения профилей с использованием современных OS X API, так что пришлось жестко закодировать их:

#define COLORSYNC_DIR_NETWORK "/Network/Library/ColorSync/Profiles/" 
#define COLORSYNC_DIR_SYSTEM "/System/Library/ColorSync/Profiles/" 
#define COLORSYNC_DIR_LOCAL  "/Library/ColorSync/Profiles/" 
#define COLORSYNC_DIR_USER  "/Library/ColorSync/Profiles/" 
1

Вы можете использовать CoreGraphice API

colorSpace = ::CGDisplayCopyColorSpace(::CGMainDisplayID()); 

затем , с api любит:

CGColorSpaceCopyICCData  

вы можете сделать некоторые цвета синхронизации вещей. Я думаю, что это скорее всего то, что вы хотите сделать со старым API ColorSync.

+0

Это выглядит многообещающим - спасибо! У меня больше нет Xcode на Mac, чтобы попробовать. Я отвечу на ваш ответ прямо сейчас и приму это, когда у меня будет шанс подтвердить, что это работает. –

0

Это то, что я делаю, чтобы получить путь к профилю для известного идентификатора прямого отображения.

  1. включает новые рамки ColorSync, так как 10.13 не в ApplicationServices больше
  2. новообращенного дисплей идентификатор UUID с помощью CGDisplayCreateUUIDFromDisplayID
  3. ColorSyncIterateDeviceProfiles вызовов с обратным вызовом
  4. обратным вызов будет вызываться для каждого устройства, и вы получите словарь в качестве параметра с информацией об устройстве, UUID, URL, name, ...
  5. Я сравниваю свой UUID с UUID в словаре, если нашел совпадение, копирую URL из словаря и возвращаю false, чтобы остановить итерацию, если не вернусь true, чтобы получить обратный вызов для следующего устройства
Смежные вопросы