Техническое примечание TN2035

ColorSync на Mac OS X

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

Обзор
ColorSync и кварц
Цветовая модель в кварце
Рисование на многократные экраны
Профили в Mac OS X
CMMs в Mac OS X
Предпочтения ColorSync и поддержка APIs
Поддержка устройства ColorSync
Управление цветом в печати
Кварцевые фильтры
Утилита ColorSync
ColorSync и OpenGL
ColorSync и QuickTime
ColorSync и захват изображения
Калибровка дисплея
SIPS
ColorSync изменяет для Mac OS X 10.4 Тайгера
Ссылки
История версии документа

Обзор

Существует большое разнообразие устройств отображения на рынке сегодня, таких как цифровые фотоаппараты, цветные сканеры, цветные принтеры, и т.д., и каждое устройство представляет, раскрашивает совсем другие пути. У каждого из них есть различные цветовые пространства и различные палитры (диапазоны цветов). Это, конечно, делает его очень трудным для документа полученный на одном устройстве, которое будет представлено правильно на другом устройстве. Решением этой проблемы является ColorSync, полная система управления цветом, разработанная для обеспечения непротиворечивого цвета через устройства.

Две ключевых основы, на которых создается ColorSync, являются профилями International Color Consortium (ICC) и Модулями управления цветом (CMMs).

Профили ICC

Профили ICC используют межплатформенный формат файла, определенный ICC. Они - документы, содержащие данные, описывающие, как преобразовать цвета от цветового пространства устройства до промежуточного цветового пространства. Этот формат файла допускает описание большого разнообразия устройств. Формат данных был разработан, чтобы быть довольно гибким, и может быть расширен разработчиками через дополнительные теги. Кроме того, формат является развивающимся форматом с продолжающимися улучшениями.

CMM

При размышлении о профилях как о данных, используемых для управления цветом CMMs являются кодом. CMMs обеспечивают математический механизм для выполнения трансформаций от профиля к профилю. Apple поставляет CMM по умолчанию, Apple CMM, как часть ColorSync. Это - тот же CMM по умолчанию поставки Apple на Mac OS 9. Однако мы разработали систему, чтобы быть открытыми и расширяемыми, таким образом, третьи лица могут разработчик их собственный CMMs, если они хотят обеспечить свои собственные альтернативные методы для преобразований цвета.

Вот схема, показывающая, как ColorSync вписывается в архитектуру Mac OS X:

Рисунок 1  Mac OS X Architecture & ColorSync.

ColorSync 2.0 и больший APIs полностью поддерживаются в Mac OS X. Это означает, что для разработчиков должно быть очень просто портировать их приложения на Mac OS X. Существует также некоторый новый APIs в ColorSync в Mac OS X, обеспечивающих некоторые улучшения, которые можно хотеть использовать в своих интересах. Кроме того, Кварц и модель печати в Mac OS X в полной мере пользуются ColorSync.

ColorSync и кварц

в Mac OS X ColorSync был присвоен новая роль, охватывающая больше, чем просто стандартные прикладные службы. ColorSync теперь используется для обеспечения управления цветом для других системных компонентов. Одним из этих компонентов является Кварц, новая графическая система Apple на основе PDF модель обработки изображений. Кварц создал новую парадигму для управления цветом, предлагающего альтернативный доступ к функциональности ColorSync.

ColorSync и кварцевое управление цветом

Наши цели здесь состояли в том, чтобы интегрировать службы графического и управления цветом, удовлетворив некоторые основные требования. Во-первых, Кварцу была нужна возможность составить различные цветовые пространства и непрозрачность. Для соответствия этому требованию ColorSync используется для преобразования данных из многих различных цветовых пространств в одно пространство, выбранное Кварцем как рабочая область для наборщика.

Второе требование, фокусируемое на потребностях разработчика, и, основывается на факте, все приложения с помощью Кварца должны будут работать с управлением цветом. Это также должно было быть масштабируемым решением, которое удовлетворит потребности широкого диапазона приложений. С одной стороны, участие приложения в цвете управление может быть очень минимальным, ограничено использованием некоторых предопределенных настроек по умолчанию, предоставленных Кварцем. С другой стороны, приложение может иметь тот же полный контроль над управлением цветом, как это делает при доступе к ColorSync непосредственно. Другие требования включают точность цветопередачи, производительность и compatablilty с PDF.

Проще говоря, Кварцевое управление цветом может быть описано как создаваемый вокруг ColorSync, использующегося в качестве механизма для обработки данных цвета PDF, произведенных Кварцем.

  Кварцевое управление цветом рисунка 2.

Цветовая модель PDF

Для лучше понимания его проекта вот, некоторые фундаментальные понятия, принадлежащие для раскрашивания PDF и ColorSync:

Определение цветов PDF

В PDF цвет определяется одним из известных цветовых пространств - Устройство, Калиброванное или базируемый ICC:

Табличные 1  цветовые пространства в PDF.

Цветовые пространства в PDF

/DeviceGray,/DeviceRGB,/DeviceCMYK

/CalGray,/CalRGB,/CalLab

/ICCBased

Этот список по существу отражает историю управления цветом. Первоначально, только цветовые пространства устройства поддерживались. На основе нашей перспективы сегодня, цветовые пространства устройства просто обеспечили спецификацию для различных моделей смесевого цвета. Поскольку цветное появление зависимо от устройств, эти пробелы являются фактически худшим выбором для верного цветного воспроизведения через различные устройства.

Затем, калиброванный цвет был изобретен, вместе с идеей преобразований цветов через независимый от устройств цвет. Преимущество этого метода является существенным улучшением, в цвете соответствующим через различные устройства. PDF следует путем добавления калиброванных цветовых пространств. Позже, калиброванный цвет развился в стандартную форму - профиль ICC. Когда управление цветом на основе профилей ICC получило свою популярность и стало фактическим стандартом среди цветных профессионалов, PDF добавил основанное на ICC цветовое пространство, допускающее встраивание профилей ICC в документы в формате PDF.

Преобразование цветов PDF

PDF окрашивает, coversion может быть описан как функция пространства исходного цвета, целевого цветового пространства и намерения рендеринга. Примите во внимание значения намерения рендеринга:

Рисунок 3  преобразование цветов PDF.

Цветовая модель ColorSync/ICC

Теперь давайте смотреть на то, как ICC и ColorSync определяют преобразование цветов и преобразование цветов.

Определение цветов ICC

Естественно, цвет определяется профилем ICC. Как упомянуто ранее, профиль ICC является самой общей формой описания цветового пространства.

Преобразования цветов ICC

Преобразования цветов ICC очень подобны тем в PDF. Различиями является опция вставить промежуточный профиль между источником и целевые профили:

Рисунок 4  преобразования цветов ICC.

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

Представляя намерение = {перцепционный, относительный колориметрический, насыщенность, абсолютная колориметрический}

Цветовая модель в кварце

Интеграция PDF и цветовых моделей ICC

Цветовая модель в Кварце создавалась путем интеграции цветовых моделей PDF и ICC. Вот некоторые интересные функции этой модели. Все цветовые пространства PDF выражены в Кварце как профили ICC. Цветовые пространства устройства присваиваются профили по умолчанию следующим образом:

  • /DeviceGray-> Кварцевое Серое Значение по умолчанию

  • /DeviceRGB-> Кварцевое Значение по умолчанию RGB

  • /DeviceCMYK-> Кварцевое Значение по умолчанию CMYK

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

Эквивалентность цветового пространства PDF

Другое простое, но очень важное понятие, что Кварц, наследованный от PDF, является эквивалентностью цветового пространства. Подразумеваемое правило состоит в том, что преобразования цветов необходимы, только если пространство исходного цвета отличается от места назначения. Кварц использует в своих интересах это простое правило должным образом организовать поток цветных данных через многократные этапы рендеринга:

  Эквивалентность Цветового пространства рисунка 5

Цветовое пространство является одним или более профилями ICC

Как упомянуто ранее, все цветовые пространства PDF выражены в Кварце как профиль ICC способом, который является бесшовным и прозрачным через все приложения, работающие в PDF модель обработки изображений. Но одновременно, нам было нужно условие в Кварце для создания преобразований цвета больше чем для двух профилей. По этой причине мы разработали цветовое пространство, которое может состоять из одного или более профилей ICC. Таким образом, мы в состоянии сохранить понятие PDF соответствия единственного источника единственному месту назначения, но одновременно мы в состоянии создать те сложные преобразования цвета, подходящие для усовершенствованного управления цветом. И если потребность возникает для такого цветового пространства, которое будет встроено в PDF, многократные профили, содержавшиеся в таком цветовом пространстве, могут быть связаны ColorSync в единственный профиль.

Раскрасьте кварцевую модель рисования

Давайте теперь посмотрим, как все вещи просто обсудили, объединяются для обеспечения обработки требуемого цвета в Кварцевой модели рисования. С точки зрения верхнего уровня существует три основных компонента, вовлеченные в эту модель:

  • Приложение, генерирующее графическое содержание

  • Кварц, предоставляющий услуги рендеринга

  • Место назначения для растеризированных данных

С точки зрения цветной обработки приложение может запросить Кварц представить данные в любом из цветовых пространств PDF. Для выполнения этого Кварц преобразует все они в профили ICC. Профили по умолчанию выбраны Кварцем, но могут быть переопределены приложением. Кварц сделает все составление композита в рабочей области, и ColorSync будет вызван для выполнения преобразований цвета от любых из пробелов исходного цвета к рабочей области. Наконец, когда составление композита завершается, растеризированные данные будут отправлены желаемому месту назначения. Естественно, если цветовое пространство места назначения не соответствует рабочую область, и дополнительное преобразование должно быть сделано.

Давайте посмотрим, как удобное Кварцевое управление цветом может быть для некоторых цветных операций. Например, применение специальных эффектов ко всем данным может быть очень легко достигнуто просто путем добавления абстрактного профиля к рабочей области. Как показано в следующей схеме, все преобразования в рабочую область будут включать трансформацию, определяющую абстрактный профиль:

Рисунок 6  , применяющий специальные эффекты с абстрактным профилем.

Мягкая проверка является другой задачей, особенно подходящей для управления цветом, Путем добавления профиля принтера к рабочей области все коррекции цвета, определяющие профиль принтера, отражаются в рабочей области, и таким образом будут показаны на главном дисплее.

  Распечатка мягкой проверки рисунка 7 на главном дисплее.

Использование цветовых пространств мультипрофиля не ограничивается Кварцевыми внутренностями. Приложения могут также использовать их. Вот пример приложения, использующего данное цветовое пространство для создания свободного - преобразовывают цветовое пространство для произведения определенных цветовых эффектов.

  Свободный рисунок 8 - преобразовывает цветовое пространство, использованное для произведения цветовых эффектов.

Кварц, распечатывающий фронтэнд

Для завершения нашей истории об управлении цветом в Кварце давайте посмотрим на то, как цвет обрабатывается в печати от Кварца. До сих пор мы говорили об основном потоке цветных данных от источника до места назначения. Но еще один шаг также возможен здесь. Содержание может быть spooled в форме PDF для печати, которая будет обработана центром печати. Существует один очень важный факт о spooled данных. Как был указан, все цветные данные тегируются в spooled PDF. И профили присваиваются данным точно таким же образом, они для обработки ColorSync:

  Данные Цвета рисунка 9 тегируются в spooled PDF.

Кварцевый растр, распечатывающий бэкэнд

Согласование цветов ColorSync

Кварц также используется для растеризации этого spooled PDF в бэкэнде печати. С точки зрения управления цветом у нас есть две опции здесь. Право преимущественной покупки должно использовать ColorSync для согласования цветов. В этом случае все цветные данные от spooled PDF преобразовываются в профиль принтера (Примечание: нет никаких данных устройства в spooled PDF).

Рисунок 10  Spooled PDF, преобразованный в профиль принтера.

Пользовательское согласование цветов драйвера

Другая опция является пользовательским согласованием цветов драйвера. Цветные данные, проектом, будут переданными в цветовом пространстве профиля по умолчанию, предоставленного системой. В результате все данные, тегирующиеся с тем же профилем по умолчанию, останутся нетронутыми. И очевидно все другие цветные данные будут преобразованы ColorSync в системный профиль.

Рисунок 11  Пользовательское согласование цветов драйвера.

Кварц в бэкэнде PostScript

ColorSync также вовлечен в бэкэнд PostScript. С точки зрения управления цветом наша цель здесь состоит в том, чтобы преобразовать цветовые пространства, содержавшиеся в spooled PDF к массивам цветового пространства PostScript (CSAs). Кварц имеет внутреннюю возможность преобразовать калиброванные цветовые пространства PDF непосредственно в PostScript CSAs. Все профили ICC будут преобразованы в PostScript CSAs использование ColorSync.

Рисунок 12  профили ICC, преобразованные в PostScript CSAs.

Печать немаркированных данных

Вот некоторые общие сведения о способах поведения, которые можно ожидать от системы печати при печати немаркированных данных:

Дисплей PDF

Немаркированные данные RGB в PDF будут тегированы с Универсальным профилем RGB, и в результате это будет соответствующим цвету на экран.

Печать фронтэнда

Когда передающие исходные данные к системе печати, шпульки фронтэнда печати задание печати в Формате PDF, и, как описано в разделе выше Кварца, Распечатывающего Фронтэнд, все цветные данные тегируются в spooled PDF. Поэтому при передаче немаркированных исходных данных RGB системе печати для печати, ColorSync тегирует данные с Универсальным профилем RGB (как сделан при отображении данных PDF).

Печать бэкэнда

При печати в Mac OS X ColorSync будет соответствовать исходные данные к любому профилю, который обеспечивает драйвер принтера. Поэтому драйвера принтера должны зарегистрировать профили для своих устройств с помощью Устройства APIs, как обсуждено в этом примечании.

Растровая печать

Если драйвер принтера не обеспечит профиля, то ColorSync заменит Универсальным профилем RGB.

Печать PostScript

Первоначально немаркированные данные RGB в конечном счете преобразовываются в цветовое пространство CIEBasedABC на основе Универсального профиля RGB.

Рисование на многократные экраны

Как описано в разделе ColorSync и Quartz существует большое разнообразие основанных на ICC цветовых пространств, предоставленных Кварцем. Этот раздел фокусируется на тех, которые позволяют Вам получать доступ к базе данных ColorSync Device Integration.

Примером являются цветовые пространства, допускающие рисование непосредственно на экран. Существует Дисплей цветовое пространство RGB, которое является по существу оберткой вокруг профиля главного дисплея. Серый дисплей, составленный из двух профилей: профиль ссылки устройства, преобразовывающий Серый в RGB, который тогда присоединен к профилю главного дисплея. И для более усовершенствованного использования существует Дисплей с пространством ID, оберткой для Дисплея профилями AVID:

  Цветовые пространства рисунка 13, допускающие рисование непосредственно на экран.

Кварц в Mac OS X v10.3 «Пантера» помогает решить проблему рисования на многократные экраны. Существует три основного выбора, который приложение может сделать, то, которое может быть определено как «Простая модель», другой, который может быть определен как «Полная модель» или наконец приложение может использовать комбинацию этих двух методов.

Они могут быть охарактеризованы следующим образом:

Выбор приложений

Простая модель

Полная модель

Некоторая комбинация вышеупомянутого

Профили в Mac OS X

На Mac OS 9, профили традиционно сохранены в папке Profiles в Системной папке. Приложение, желающее получить доступ к этой папке, использовало бы CMGetColorSyncFolderSpec API, передающий в kSystemDisk для vRefNum параметр следующим образом:

CMGetColorSyncFolderSpec(kSystemDisk, ...);

Вы могли также использовать Mac OS FindFolder API как эквивалентный метод. Однако одна из главных особенностей Mac OS X - он, разработан, чтобы быть полностью сетевым и многопользовательским здравым смыслом. Поэтому больше нет всего одного расположения, где профили могут быть сохранены, но и несколько. Существует специальное расположение в Системной папке Mac OS X для профилей:

/System/Library/ColorSync/Profiles/

Это - то, где хранилища ColorSync профилируют его использование внутренне для критических операций, должны другие быть по ошибке потерянными или поврежденными. Эта папка заблокирована и защищена, но если необходимо заставить доступ к этой папке быть в состоянии считать эти профили, можно снова использовать CMGetColorSyncFolderSpec API, передавая kSystemDomain постоянный для vRefNum параметр следующим образом:

CMGetColorSyncFolderSpec(kSystemDomain, ...);

Профили ColorSync основные сохраненный здесь:

/Library/ColorSync/Profiles/

Это - то, где ColorSync хранит большинство своих профилей. Это - папка чтения / перезаписываемая папка. Если необходимо заставить доступ к этой папке быть в состоянии читать, эти профили используют CMGetColorSyncFolderSpec API, передавая kLocalDomain постоянный для vRefNum параметр следующим образом:

CMGetColorSyncFolderSpec(kLocalDomain, ...);

Если Вы находитесь в сетевой среде, и Ваш администратор сети сохранил профили в сети для сетевых устройств, они могут быть сохранены в:

/Network/Library/ColorSync/Profiles/

Если необходимо заставить доступ к этой папке быть в состоянии читать, эти профили используют CMGetColorSyncFolderSpec API, передавая kNetworkDomain постоянный для vRefNum параметр следующим образом:

CMGetColorSyncFolderSpec(kNetworkDomain, ...);

Наконец, пользователи могут сохранить свои собственные персональные профили в их корневом каталоге:

~/Library/ColorSync/Profiles/

Если необходимо заставить доступ к этой папке быть в состоянии читать, эти профили используют CMGetColorSyncFolderSpec API, передавая kUserDomain постоянный для vRefNum параметр следующим образом:

CMGetColorSyncFolderSpec(kUserDomain, ...);

Как на Mac OS 9, ColorSync в поддержках Mac OS X, смотрящих в подпапках всех вышеупомянутых каталогов (один уровень глубоко), или псевдонимы к этим папкам или профилям. Таким образом, существует очень много расположений, где профили могут быть сохранены в Mac OS X. Если Ваше приложение хотело бы представить список профилей пользователю, мы предлагаем, чтобы Вы использовали CMIterateColorSyncFolder API. Этот API значительно упростит Ваш код, поскольку он ищет все вышеупомянутые расположения профили. Кроме того, это предлагает преимущества высокой эффективности, потому что это кэширует часто используемую информацию.

Одно важное примечание относительно этого API - если у Вас есть установка системной папки Классики Mac OS в дополнение к системной папке Mac OS X, ColorSync по умолчанию, не будет искать эту системную папку Классики Mac OS профили. Однако, если Ваше приложение хочет получить доступ к профилям в этом расположении, используйте CMIterateColorSyncFolder Передача API kClassicDomain для vRefNum параметр:

CMGetColorSyncFolderSpec(kClassicDomain, ...);

Таким образом, приложение должно установить профили в:

/Library/ColorSync/Profiles/

или в подпапке его. Пользователи могут установить персональные профили в:

~/Library/ColorSync/Profiles/

Предпосылки профиля

Традиционно, профили были отфильтрованы на основе их типа и создателя на Mac OS 9 (тип'prof', создатель'sync'). Однако профили могут не иметь типа и создателя, таким образом, ColorSync больше не проверяет тип и создателя профилей. Кроме того, профили не должны иметь никакого суффикса. Однако, если Вы действительно используете одно использование'.icc'. Путем стандартизации на одном суффиксе это упрощает для приложений с помощью Какао NSOpenPanel APIs для фильтрации профилей. Точно так же при использовании типа и создателя для профиля используйте'prof'и''sync'', поскольку это упростит для Carbon Navigation Services APIs для фильтрации профилей. В его основе ColorSync больше не заботится о типе, создателе или суффиксе.

Что действительно различает, профиль ColorSync от любого старого файла - то, если это - допустимый профиль ICC. ColorSync определяет, является ли файл допустимым профилем ICC путем поиска байтов подписи'acsp'(обозначает «профиль ColorSync») при надлежащем смещении в его блоке заголовка. ColorSync также налагает дополнительное ограничение, что профиль содержит допустимый тег описания. Много приложений представят списки профилей пользователю, и если профиль будет иметь дурную славу в теге описания, то он покажет как мусор или нисколько. Во избежание этих проблем мы предлагаем, чтобы Вы использовали утилиту ColorSync Profile First Aid, чтобы удостовериться, что Ваши профили свободны от распространенных ошибок.

Новые дополнительные теги профиля

Одна из главных особенностей Mac OS X - он, мультилокализованная операционная система. ColorSync теперь обеспечивает эту ту же функциональность для профилей ICC. В настоящее время формат ICC определяет требуемый тег 'desc', который хранит ASCII, UniCode и версии ScriptCode описания профиля в целях дисплея. Однако эта структура позволяет профилю быть локализованным для одного языка только через UniCode или ScriptCode. Поставщики профиля должны поставить много локализованных версий в разные страны. Это также создает проблемы, когда документ с локализованными профилями, встроенными в него, поставляется в систему с помощью различного языка. ColorSync определил новый дополнительный тег для исправления этой ситуации:

- 'mluc'мультилокализованный Тег UniCode

Этот тег содержит ряд многоязычных строк Unicode, связанных с профилем. Мы также обеспечиваем много новых APIs для легкого доступа к этому тегу:

CMError CMCopyProfileLocalizedStringDictionary   (CMProfileRef prof, OSType tag, CFDictionaryRef* dict);

профессор - профилирует для запросов

тег - тип тега профиля для запросов

dict - словарь возвратов

Этот API позволяет Вам получать a CFDictionary который содержит локаль языка и строку для многократных локализаций от данного тега. Точно так же существует a CMSetProfileLocalizedStringDictionary API, чтобы позволить Вам писать словарь локализованных строк к данному тегу в профиле:

CMError CMSetProfileLocalizedStringDictionary   (CMProfileRef prof, OSType tag, CFDictionaryRef dict);

профессор - профилирует для изменения

тег - тип тега профиля для изменения

dict - словарь для изменения

Однако большинство приложений просто захочет вытащить одну определенную строку из профиля. Поэтому мы обеспечиваем CMCopyProfileLocalizedString функция:

CMError CMCopyProfileLocalizedString (CMProfileRef  prof,
                                      OSType        tag,
                                      CFStringRef   reqLocale,
                                      CFStringRef*  locale, 
                                      CFStringRef*  str);

профессор - профилирует для запросов

тег - тип тега профиля для запросов

reqLocale - требуемая локаль (дополнительный

локаль - возвращает (дополнительную) локаль

dict - (дополнительная) строка словаря возвратов

Вот короткий пример, показывающий, как использовать эту функцию. Мы передаем в дополнительном теге'dscm'плюс»enUS«для reqLocale параметр, ища США. Строка Enlish. Если английская строка США не будет найдена, то ColorSync отступит к разумному значению по умолчанию:

err = CMCopyProfileLocalizedString (prof, 'dscm', CFSTR("enUS"), nil, &theStr);

Профили ICC4

ICC работал над новым форматом для профилей для обеспечения большей гибкости и питания. Этот новый формат является спецификацией формата профиля ICC 4.0. Некоторые выделения включают:

  • Новая версия в заголовке

различать от более ранних версий

  • Новый MD5 (дайджест сообщения) контрольная сумма в заголовке

сказать, идентичны ли два профиля, или если профиль изменялся в течение долгого времени. Можно получить доступ к этой новой контрольной сумме MD5 непосредственно в заголовке профиля, или поочередно существует новый ColorSync API CMGetProfileMD5. ColorSync API имеет преимущество, что это работает и с профилями ICC 4 и с более ранними профилями.

  • Новые типы данных тега ('mluc', 'mBA ', 'mAB ', 'para')

Эти новые теги действительно демонстрируют новое питание и гибкость профилей ICC 4. Одно важное примечание является некоторыми Вашими существующими тегами, может теперь содержать эти новые форматы данных, например,'A2B0'может содержать'mft1'или'mAB 'данные. Хорошими новостями является ColorSync и Apple, CMM будет полностью здравым смыслом ICC4. Это означает, не анализирует ли Ваше приложение профили, но просто использует ссылки профиля для согласования цветов, все будет «просто работать». Однако, если Ваше приложение создает, изменяет профили, необходимо знать об этих новых типах тега, чтобы удостовериться, что Вы обрабатываете эти случаи правильно.

CMMs в Mac OS X

Как с профилями, CMMs может также быть установлен в многократных расположениях. Как правило, приложения установили бы CMMs в:

/Library/ColorSync/CMMs

Кроме того, пользователи могут установить персональный CMMs (например, для отладки) в:

~/Library/ColorSync/CMMs

Если Ваше приложение хотело бы представить список CMMs пользователю, используйте CMMIterateCMMInfo API. Посмотрите Техническое примечание TN1160, 'Новые функции и возможности С ColorSync 2.6' для получения дополнительной информации. Это даст Вам информацию обо всем CMMs, установленном в системе, включая CMM по умолчанию.

Здание CMMs

CMMs в Mac OS X CFBundle основанный, тогда как на Mac OS 9 они - базируемый Менеджер компонентов. Посмотрите CFBundle документация для подробных данных об использовании этого APIs для создания CMM как a CFBundle.

CMMs в Mac OS X все еще содержат все знакомые точки входа, существующие для CMMs на Mac OS 9 такой как CMMOpen, CMMConcat, CMMMatchBitmap, CMMClose, и т.д. Однако Mac OS X CMMs теперь имеет a CFBundle обертка вокруг этих точек входа вместо обертки Менеджера компонентов.

CMM Apple подвергся большой работе, чтобы удостовериться, что она точно настраивается и интегрируется полностью с Кварцем для обработки всех различных типов профиля и пробелов цвета изображения правильно. Если Вы пишете свой собственный CMM, удостоверьтесь и протестируйте его полностью, и под большим разнообразием случаев, чтобы гарантировать, что это работает в этой среде.

Предпочтения ColorSync и поддержка APIs

Под Классическим Mac OS приложения, выполняющие управление цветом обычно, не имеют знания различных устройств в системе. Из-за этого приложения сочли бы необходимым представить некоторый интерфейс для получения информации о цвете устройства от пользователя. Точно так же приложения, выполняющие управление цветом на данных без связанного профиля, должны были бы понять, из какого устройства данные произошли. Снова, это потребовало бы, чтобы приложение представило некоторый интерфейс, чтобы позволить пользователю выбирать профиль по умолчанию для цветового пространства или документа. В течение долгого времени пользователи становились смущенными большим несметным числом различных интерфейсов, представляемых приложениями, выполняющими управление цветом. ColorSync в Mac OS X теперь знает о системных устройствах системы, и пользовательский интерфейс ColorSync был перепроектирован для использования в своих интересах этой информации.

Профили для пробелов стандартного цвета

Документы могут, конечно, содержать много различных типов данных. С этим меню пользователи может указать профили для документов для различных цветовых пространств. Конечно, если документ действительно будет иметь профиль, то это будет иметь приоритет, но часто документы времен не имеют профилей связанными с ними. Пользователи могут получить это предпочтение через CMGetDefaultProfileBySpace API следующим образом:

enum {
        cmXYZData = 'XYZ ',
        cmLabData = 'Lab ',
        cmRGBData = 'RGB ',
        cmSRGBData = 'sRGB',
        ... 
    };

CMGetDefaultProfileBySpace ( OSType space, CMProfileRef* prof );

пространство - цветовое пространство

профессор - возвращает профиль по умолчанию для указанного цветового пространства

Вот пример кода, демонстрирующий, как приложение могло бы получить преимущества от этого APIs. Выборка принимает ссылку изображения как ввод и пытается получить информацию или данные из этой ссылки. Первая вещь, которую приложение должно сделать при управлении цветом для документа, состоит в том, чтобы определить, существует ли какой-либо встроенный профиль для документа. Большинство современных форматов изображения имеет контейнеры для профилей, таким образом, существуют известные способы получить профили для документов в этих форматах. Однако, если нет никакого профиля, связанного с документом, мы можем удобно использовать CMGetDefaultProfileBySpace API (после того, как, сначала получая пространство цвета изображения) для получения разумного исходного профиля по умолчанию для документа.

Затем, мы получаем целевой профиль для документа. Мы можем использовать CMGetDefaultProfileByUse получить целевой профиль. И с источником и с местом назначения профилируют, мы теперь в состоянии выполнить наше управление цветом - в этом примере, мы используем NCWNewColorWorld и CWMatchBitMap.

Одно важное примечание относительно этого примера является кодом, показанным, здесь является подходящим для приложения Классики или Углерода Mac OS, работающего на Mac OS 9. В Mac OS X большая часть целевого управления цветом сделана для Вас, таким образом, Вам не нужно это соответствие, если Ваше приложение использует Кварц. Однако необходимо, по крайней мере, знать, куда данные прибывают из, и если никакой профиль не связан с ними, можно тегировать их с помощью ColorSync APIs.

Пример кода ColorSync Prefs

CMError myMatchImage (myImageRef image)
{
    CMProfileRef source, dest;
    CMWorldRef cw;
    CMBitMap bm;

    source = myGetEmbeddedProfile (image);
    if (source == nil)
    {
        space = myGetColorImageSpace (image);
        err = CMGetDefaultProfileBySpace (space, &source);
    }

    err = CMGetDefaultProfileByUse (cmDisplayUse, &dest);
    err = NCWNewColorWorld (&cw, source, dest);
    bm = myGetImageBitMap (image);
    err = CWMatchBitMap (cw, &bm, ..., ..., ...);
...

Предпочтительные лакомые кусочки ColorSync

Как с ColorSync 3.0 на Mac OS 9, приложения ColorSync в Mac OS X могут также запустить панель управления ColorSync для требования выборов цветов, включая профили по умолчанию для устройств и документов, а также предпочтительного CMM. Пользователи могут также переключиться между именованными наборами вызванных потоков операций настроек цветов.

Для запуска панели управления ColorSync из приложения просто вызовите следующую функцию:

pascal CMError CMLaunchControlPanel (UInt32 flags);

флаги - необходимо передать значение 0 для этого параметра. Будущие версии ColorSync могут определить константы для параметра флагов, чтобы указать, как запускается панель управления ColorSync.

функциональный результат - код результата типа CMError.

Когда Ваше приложение вызывает CMLaunchControlPanel подпрограмма, любые изменения, внесенные пользователем, не будет доступна (через вызовы такой как CMGetDefaultProfileBySpace) пока пользователь не закрывает панель управления ColorSync. В настоящее время нет никакого ColorSync API для определения, если панель управления ColorSync была закрыта, хотя на Mac OS 9 можно использовать Диспетчер процессов API с этой целью.

Предпочтительная сводка ColorSync

Так как все данные являются цветом, которым управляет Кварц в Mac OS X, Ваше приложение может участвовать просто путем проверки источник и целевые данные связаны с профилем. Большинство приложений может использовать Предпочтения ColorSync APIs для управления цветом, для получения предпочтений пользователя. И они профилируют средство доступа, APIs расширяем, мост к будущему устройству и поддержке цветового пространства. Наконец, Предпочтения ColorSync, которые APIs предлагает большой гибкости, в которой приложения могут управлять цветом и с ориентированных на документы и с центральных устройством точек зрения.

Поддержка устройства ColorSync

Mac OS X содержит новые диспетчеры устройств для ввода, дисплей и печать. Это предоставляет возможность для разработчиков, чтобы интегрироваться с ColorSync и обеспечить и осведомленность об устройствах и доступ к их профилям. Эта новая поддержка устройства была реализована со следующими службами:

Устройство и регистрация профиля:

ColorSync полагается на Диспетчеры устройств, чтобы обнаружить присутствие устройств и обнаружить или создать профили устройства. Следующее является новым ColorSync APIs, который можно использовать для устройства захвата изображения и профилировать информацию:

CMRegisterColorDevice

CMError CMRegisterColorDevice(   CMDeviceClass          deviceClass,   CMDeviceID             deviceID,   CFDictionaryRef        deviceName,   const CMDeviceScope *  deviceScope);

Параметры

deviceClass

Класс устройства (например, 'scnr', 'cmra', 'prtr', 'mntr')

deviceID

Уникальный идентификатор на класс (Класс + ID уникально устройство ID)

deviceName

Имя устройства.

deviceScope

Структура, определяющая пользователя и объем узла это устройство, принадлежит.

Для устройства, которое будет распознано ColorSync (и возможно другие части МАКОСКСА), это должно зарегистрировать себя через этот API. Если устройству связали профили ColorSync с ним, это должно идентифицировать тех через CMSetFactoryDeviceProfiles API, после регистрации в этом API. Как только устройство регистрируется, это может появиться как ввод, вывести, или пробопечатном устройство в средствах управления ColorSync, пока это имеет профили, связанные с ним. Когда устройство установлено, регистрационная потребность только происходит один раз. Драйверы устройств не должны регистрировать свое устройство каждый раз, когда они загружаются.

CMUnregisterColorDevice

CMError CMUnregisterColorDevice (  CMDeviceClass    deviceClass,  CMDeviceID    deviceID );

Параметры

deviceClass

Класс устройства (например, 'scnr', 'cmra', 'prtr', 'mntr')

deviceID

Уникальный идентификатор на класс (Класс + ID уникально устройство ID)

Когда устройство больше не должно использоваться в системе (в противоположность тому, чтобы быть оффлайновым), это должно быть не зарегистрировано. Если устройство временно закрыто или отключено, это не должно быть не зарегистрировано если драйвер устройства: a) «знает», что не будет использоваться (деинсталлируемый) b), не может получить доступ к профилям устройства без устройства. Если любой из них является истиной, устройство должно быть не зарегистрировано.

CMSetFactoryDeviceProfiles

CMError CMSetFactoryDeviceProfiles (  CMDeviceClass        deviceClass,  CMDeviceID        deviceID,  CMDeviceProfileID    defaultID,  const CMDeviceProfileArray*    deviceProfiles );

Параметры

deviceClass

Класс устройства (например, 'scnr', 'cmra', 'prtr', 'mntr')

deviceID

Уникальный идентификатор на класс (Класс + ID уникально устройство ID)

принявший значение по умолчанию

ID профиля по умолчанию для этого устройства.

deviceProfiles

Ptr к хранению вызывающей стороны, содержащему массив профиля.

Этот API устанавливает профили, используемые данным устройством. Это нужно вызвать после регистрации устройств для уведомления ColorSync профилей устройства. Обратите внимание на то, что различие сделано в API между профилями устройства «фабрики» и текущими профилями устройства, так как последний может содержать модификации к установке на заводе.

Устройства по умолчанию и профили по умолчанию:

Этот новый APIs для профилей и стандартных устройств обеспечивает доступ к значениям по умолчанию, не только любой профиль устройства. Когда профили регистрируются для устройства, каждый идентифицируется как значение по умолчанию для того устройства. Однако в течение долгого времени пользователь может изменить их настройки. Когда пользователь изменяет настройки, устройство по умолчанию или профиль по умолчанию могут измениться, и ColorSync сделан знающий о таких изменениях Диспетчерами устройств. Диспетчеры устройств отслеживают, которых устройство является значением по умолчанию.

Вот некоторый новый APIs для управления устройствами по умолчанию и профилями:

CMSetDefaultDevice

CMError CMSetDefaultDevice (  CMDeviceClass    deviceClass,  CMDeviceID    deviceID );

Параметры

deviceClass

Класс устройства (например, 'scnr', 'cmra', 'prtr', 'mntr')

deviceID

Уникальный идентификатор на класс (Класс + ID уникально устройство ID)

Для каждого класса устройства уровень управления устройствами может установить, какое из зарегистрированных устройств является значением по умолчанию. Это помогает свести выбор управления цветом к минимуму и допускает некоторые «автоматические» функции, которые будут включены, например, «Принтер по умолчанию» как выходной выбор профиля. Если никакое такое устройство (как указано deviceClass и deviceID) не было зарегистрировано, ошибка возвращается.

CMSetDeviceDefaultProfileID

CMError CMSetDeviceDefaultProfileID (  CMDeviceClass        deviceClass,  CMDeviceID        deviceID,  CMDeviceProfileID    defaultID );

Профиль по умолчанию ID для данного устройства является важными данными из-за CMGetProfileByUse API. Этот API возвратит профиль по умолчанию для устройств в зависимости от выбора пользователя в Панели управления ColorSync. Драйверы устройств и программное обеспечение узла могут получить и установить профиль по умолчанию для данного устройства с этим API.

Параметры

deviceClass

Класс устройства (например, 'scnr', 'cmra', 'prtr', 'mntr')

deviceID

Уникальный идентификатор на класс (Класс + ID уникально устройство ID)

принявший значение по умолчанию

ID профиля по умолчанию для этого устройства.

Калибровочная поддержка:

Эти новые Диспетчеры устройств в Mac OS X теперь делают, если это возможно, для ColorSync для оказания поддержки для калибровки. Это сделано возможным по условию, ColorSync дают для профиля Диспетчеры устройств. Профили регистрируются в ID и имени «режима» (например, «простая бумага»). На профили ссылается во время обработки ID. Такие профили могут быть настроены приложением. Например, калибровочное приложение может получить профиль фабрики для данного режима калибровки, и затем установить новый профиль (ID), чтобы использоваться для того режима.

Вот некоторый новый APIs, поддерживающий настройку профиля:

CMGetDeviceFactoryProfiles

CMError CMGetDeviceFactoryProfiles
(
 CMDeviceClass        deviceClass,
 CMDeviceID        deviceID,
 CMDeviceProfileID*    defaultID,
 UInt32*        arraySize,
 CMDeviceProfileArray*    deviceProfiles
);

Этот API позволяет вызывающей стороне получать исходные профили для данного устройства. Они могут отличаться от фактических профилей в использовании для того устройства в случае, где любые профили фабрики были заменены (обновленные). Для получения фактических профилей в использовании вызвать CMGetDeviceProfiles.

Параметры

deviceClass

Класс устройства (например, 'scnr', 'cmra', 'prtr', 'mntr')

deviceID

Уникальный идентификатор на класс (Класс + ID уникально устройство ID)

принявший значение по умолчанию

Ptr к хранению для ID профиля по умолчанию для этого устройства.

arraySize

Ptr к хранению для размера массива, который будет возвращен. Вызывающая сторона может сначала вызвать эту подпрограмму, чтобы возвратить размер, затем вызвать его снова с размером буфера для получения массива.

deviceProfiles

Ptr к хранению вызывающих сторон для получения массива профиля. Вызывающая сторона может сначала передать NIL в этом параметре для получения размера массива в arraySize параметре. Затем как только ассигновать сумма в размере хранения была выделена, указатель на него может быть передан в этом параметре, чтобы скопировать массив в то хранение.

CMSetDeviceProfiles

CMError
CMSetDeviceProfiles(
  CMDeviceClass                 deviceClass,
  CMDeviceID                    deviceID,
  const CMDeviceProfileScope *  profileScope,
  const CMDeviceProfileArray *  deviceProfiles);

Этот API обеспечивает способ изменить профиль (и), используемый данным устройством. Это могут вызвать после регистрации устройств калибровочные приложения для сброса профиля (ей) устройства от заводских настроек до калиброванных профилей. Для этого вызова, который будет сделан успешно, вызывающая сторона должна передать CMDeviceClass и CMDeviceID калибруемое устройство. (Выбор устройства и идентификация могут быть упрощены через CMIterateColorDevices() API). Если недопустимое CMDeviceClass или CMDeviceID передается, ошибка (CMInvalidDeviceClass или CMInvalidDeviceID) возвращается.

Параметры

deviceClass

Класс устройства (например, 'scnr', 'cmra', 'prtr', 'mntr')

deviceID

Уникальный идентификатор на класс (Класс + ID уникально устройство ID)

profileScope

Структура, определяющая объем эти профили, принадлежит.

deviceProfiles

Ptr к хранению вызывающей стороны, содержащему массив профиля, содержащий замены для профилей фабрики. Не все исходные профили должны быть заменены этим вызовом. Поэтому массив может содержать только 1 профиль и столько же, сколько было в массиве фабрики, если они - все, чтобы быть замененными. По профилям повторно следует ID.

CMSetDeviceProfile

CMError
CMSetDeviceProfile(
  CMDeviceClass                 deviceClass,
  CMDeviceID                    deviceID,
  const CMDeviceProfileScope *  profileScope,
  CMDeviceProfileID             profileID,
  const CMProfileLocation *     deviceProfLoc);

Этот API обеспечивает способ изменить профиль, используемый данным устройством ID. Это могут вызвать после регистрации устройств калибровочные приложения для сброса профиля устройства от заводских настроек до калиброванных профилей. Для этого вызова, который будет сделан успешно, вызывающая сторона должна передать CMDeviceClass и CMDeviceID из устройства, калибруемого вместе с CMDeviceProfileID профиля для установки. (Выбор устройства и идентификация могут быть упрощены через CMIterateColorDevices() API). Если недопустимое CMDeviceClass или CMDeviceID передается, ошибка (CMInvalidDeviceClass или CMInvalidDeviceID(), возвращается.

Параметры

deviceClass

Класс устройства (например, 'scnr', 'cmra', 'prtr', 'mntr')

deviceID

Уникальный идентификатор на класс (Класс + ID уникально устройство ID)

profileScope

Структура, определяющая объем эти профили, принадлежит.

проидентификатор файла

ID профиля по умолчанию для этого устройства.

deviceProfLoc

Ptr к хранению для CMProfileLocation профиля. Так как эта структура является структурой фиксированной длины, вызывающая сторона может просто передать ptr стековой структуре или памяти, выделенной для нее.

Уведомления

Заявки теперь могут быть поданы знающий об изменениях в устройствах в их системе. ColorSync отправит уведомления распределенному центру уведомления (проверьте Какао и Базовую документацию Основы для дополнительных подробных данных о распределенных центрах уведомления). Любой процесс в системе, регистрирующейся в распределенном центре, получит эти уведомления. Вот некоторые доступные уведомления:

  • Изменения в устройстве по умолчанию для класса устройства

  • Изменения в фабрике устройства или пользовательских профилях

  • Изменения в профиле устройства по умолчанию

  • Регистрация устройств/un-registration

  • Изменения в любой из настроек в Предпочтениях ColorSync (например, если пользователь изменяет предпочтительный CMM),

Нет никакого ColorSync APIs для регистрации для получения вышеупомянутых уведомлений - ColorSync только отправляет эти уведомления распределенному центру. Вместо этого используйте следующее Какао и Базовую Основу APIs для получения вышеупомянутых уведомлений:

CFNotificationCenterAddObserver NSDistributedNotificationCenter

Вот определенные строки уведомления (от файла интерфейса ColorSync CMDeviceIntegration.h), который можно использовать с вышеупомянутыми функциями:

#define  kCMDeviceRegisteredNotification   CFSTR("CMDeviceRegisteredNotification")
#define  kCMDeviceUnregisteredNotification  CFSTR("CMDeviceUnregisteredNotification")
#define  kCMDeviceOnlineNotification  CFSTR("CMDeviceOnlineNotification")
#define  kCMDeviceOfflineNotification  CFSTR("CMDeviceOfflineNotification")
#define  kCMDeviceStateNotification   CFSTR("CMDeviceStateNotification")
#define  kCMDefaultDeviceNotification  CFSTR("CMDefaultDeviceNotification")
#define  kCMDeviceProfilesNotification  CFSTR("CMDeviceProfilesNotification")
#define  kCMDefaultDeviceProfileNotification 
                            CFSTR("CMDefaultDeviceProfileNotification")
#define  kCMPrefsChangeDeviceNotification 
                            CFSTR("AppleColorSyncPreferencesChangedNotification")

Чтобы продемонстрировать, как общий механизм уведомления работает, вот, фрагмент кода, записанный в Какао, показывающем, как Вы можете быть уведомлены, когда изменяется профиль дисплея. Во-первых, регистр со значением по умолчанию распределил центр уведомления для получения необходимых уведомлений устройства ColorSync. Затем когда уведомление будет получено, просто вызовите CMGetDefaultProfileByUse определить текущую установку для профиля дисплея:

-(void)registerNotifications
{
    NSDistributedNotificationCenter *center;

    center = [NSDistributedNotificationCenter defaultCenter];

    [center addObserver:self
               selector:@selector(notification:)
                   name:kCMDeviceUnregisteredNotification
                 object:nil];
    [center addObserver:self
               selector:@selector(notification:)
                   name:kCMDefaultDeviceNotification
                 object:nil];
    [center addObserver:self
               selector:@selector(notification:)
                   name:kCMDeviceProfilesNotification
                 object:nil];
    [center addObserver:self
               selector:@selector(notification:)
                   name:kCMDefaultDeviceProfileNotification
                 object:nil];
}
-(void)notification:(NSNotification *)note
{
   CMError err = CMGetDefaultProfileByUse(cmDisplayUse, &gProfRef);
}

Подобный код для проверки на изменения профиля мог быть записан с помощью распределенных уведомлений Основы Ядра Mac OS X (использующий NSDistributedNotificationCenter, и т.д.). Проверьте документацию Основы Ядра Mac OS X на дополнительную информацию.

Сводка поддержки устройства ColorSync

ColorSync теперь интегрируется с Диспетчерами устройств. Приложения имеют доступ к профилям по умолчанию для стандартных устройств (ввод, дисплей, вывод) через новые предпочтения ColorSync APIs. Приложения могут получить более определенную информацию профиля для зарегистрированных устройств от этого APIs. Калибровка теперь поддерживается в ColorSync плюс новые службы уведомления, теперь предоставлены.

Управление цветом в печати

Очень важным аспектом управления цветом в Mac OS X является управление цветом в системе печати. Печать в Mac OS X состоит из двух основных компонентов: фронтэнд и бэкэнд. Основная роль фронтэнда должна выбрать принтер, получить необходимые опции печати и шпульку задание печати в PDF.

Основная роль бэкэнда должна преобразовать spooled PDF в надлежащий формат для принтера.

Если мы бросаем более внимательный взгляд на фронтэнд печати, мы замечаем, что все цветные данные в spooled PDF тегируются с профилями. По определению, никакой принтер, определенные преобразования цветов сделаны во фронтэнде, но важно отметить, что система печати будет консультироваться с базой данных ColorSync Device Integration и извлекать профиль, соответствующий текущие условия печати.

То, что происходит в бэкэнде, зависит от типа принтера в использовании.

Для растровых принтеров растеризируется spooled PDF, и цветные данные преобразовываются в профиль принтера. Это выполняется путем извлечения профиля принтера из задания печати. Если ни один не будет существовать, то система печати обеспечит, профиль по умолчанию, настолько соответствующий, может произойти.

Для принтеров PostScript существует две опции: первым является традиционное согласование цветов в принтере. Для этой опции все профили от spooled PDF преобразовываются в PostScript CSAs.

Согласование цветов на узле ColorSync

Существует опция для того, чтобы сделать согласование цветов на ColorSync использующем компьютеры. В этом случае, как с растровой печатью, профили получены от задания печати. Если ни один не будет существовать, то система печати обеспечит профиль по умолчанию, таким образом, сможет произойти согласование цветов.

запись cupsICCProfile PPD Объявления

PostScript CUPS и растровые драйверы могут использовать cupsICCProfile ключевое слово для указания различных режимов для устройства вместе с профилями для каждого режима. Формат для этой записи следующие:

Перечисление 1  Новая запись объявления PPD.

*cupsICCProfile {mode specifier} {profile specifier}

где спецификатор режима является связью трех полей: цветовая модель, тип среды и разрешение. Любое из этих полей может быть опущено для выражения любой модели/носителей/разрешения. Спецификатор профиля является путем к файлу стандарта профиля относительно/usr/share/cups/profiles/.

Вот пример, показывающий принтер PostScript файл PPD, регистрирующий два режима: один для 600 X 600 точек на дюйм и один для 1200 X 1 200 точек на дюйм, сопровождаемых спецификатором профиля:

  PostScript перечисления 2 В качестве примера файл PPD, регистрирующий два режима.

*%========================
*% Device capabilities
*%========================


*ColorDevice: True


*DefaultColorSpace: CMYK


*cupsICCProfile ..600x600dpi "cmykProfile600dpi.icc"
*cupsICCProfile ..1200x1200dpi "cmykProfile1200dpi.icc"

Технический QA1352 Вопросов и ответов, 'Новые ключевые слова PPD, доступные в версии 10.3 Mac OS X', описывают это новое ключевое слово PPD подробно также.

Кварцевые фильтры

Кварцевые фильтры являются дополнительным компонентом в Кварцевой обработке изображений и конвейере согласования цветов, позволяющих Вам связывать последовательность операций обработки изображений или коррекции цвета с единственным получением. Фильтры могут действовать на все операции рисования или только на указанный набор. Они могут быть сконфигурированы для выполнения специализированной обработки изображений или цветных операций. Они могут быть определены и сохранены в XML.

Вот схема, показывающая, как Кварцевый компонент фильтра вписывается в полную Кварцевую архитектуру:

  Кварцевый компонент фильтра рисунка 14 в кварцевой архитектуре.

Кварцевые фильтры в настоящее время доступны только через различный Mac OS X созданные из системы утилиты и приложения. Однако новый набор API's будет предстоящим.

Демонстрации Кварцевых фильтров

Мягкая проверка

Мягкая проверка через Кварцевые фильтры возможна от диалогового окна печати. Просто нажмите кнопку «Preview» в диалоговом окне печати и в окне Preview, Вы будете теперь видеть флажок, названный «Мягкое Доказательство» в нижнем левом углу окна. Вот то, как это смотрит:

  Функция Мягкой проверки рисунка 15.

Диалоговое окно печати

Заметьте, что вышеупомянутое изображение является очень темным. Это может быть исправлено с помощью расширения диалогового окна принтера (PDE) ColorSync.

Для доступа к ColorSync PDE откройте диалоговое окно печати, щелчок, кнопка «Advanced», затем в получающемся диалоговом окне ищут элемент «ColorSync» в списке всплывающего меню:

Рисунок 16 ColorSync PDE  .

ColorSync PDE позволяет принтерам PostScript выбирать который опция согласования цветов использовать через всплывающее меню «Color Conversion». Выберите «Standard» или «In Printer»:

  Выбор Преобразования цветов рисунка 17.

Используя Параметры преобразования цвета возможно выполнить согласование цветов на использующем компьютеры профиль принтера («Стандарт») или нейтрализация к традиционному согласованию цветов по пути печати («В Принтере»).

Наконец, у основания меню «Quartz Filter» в ColorSync PDE существует опция добавить Кварцевые фильтры при печати:

  Кварц рисунка 18 фильтрует пункт меню.

Выберите эту опцию, и документ является spooled к PDF и отправленный вместе с «открытым» ('oapp') AppleEvent к Утилите ColorSync, открывающей документ с инспектором фильтра окно как показано ниже:

  Инспектор Фильтра рисунка 19 окно.

Если Вы щелкаете по какому-либо из фильтров в списке и также щелкаете по флажку «Preview», Вы видите результаты применения выбранного фильтра. Можно добавить и демонтировать фильтры путем нажимания кнопок "New" и "Delete".

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

  • Цвет - опции для преобразования цвета

  • Профили по умолчанию

  • Выборка/сжатие/свертка изображения

  • Домен Filter

  • Параметры PDF

Утилита ColorSync

Предпочтения ColorSync

Предпочтения ColorSync являются частью Утилиты ColorSync (ранее, они были в Установках системы). Это делает Утилиту ColorSync, «универсальные покупки» центр всего ColorSync связали настройки.

Известно, что много приложений могут обеспечить кнопку в пользовательском интерфейсе своей программы для отправки пользователей в предпочтения ColorSync. Это обычно выполняется путем вызова CMLaunchColorSyncPreferences функция. Приложения, использующие эту функцию, будут продолжать работать. Эта функция просто запустит Утилиту ColorSync вместо этого.

Кварцевая поддержка фильтра

Пользователи могут получить доступ к Кварцевым фильтрам от Утилиты ColorSync. Для получения дополнительной информации о Кварцевых фильтрах посмотрите Кварцевые Фильтры.

Функции администрирования

Утилита ColorSync содержит функции администрирования, позволяющие пользователю системного администратора указывать профили по умолчанию для других пользователей на той же машине.

3D опции представления для средства просмотра профиля

3D средство просмотра профиля в Утилите ColorSync имеет контекстное меню, чтобы позволить Вам посмотреть профиль во многих различных цветовых пространствах, таких как Лаборатория, Любовь, Yxy и другие. Вот то, как это смотрит:

  Контекстное меню средства просмотра рисунка 20 3D.

Можно также использовать средство просмотра профиля для сравнения палитры двух профилей. Элемент контекстного меню «Содержит для сравнения», позволяет Вам указывать первую из пары профилей для использования для сравнения. Просто щелчок управления по профилю в области средства просмотра для перевода в рабочее состояние контекстного меню затем выберите «Hold for comparison». Профиль будет светиться в цвете к обозначенному, он был выбран как показано здесь:

Рисунок 21  Содержит для пункта меню сравнения.

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

Рисунок 22  , Сравнивающий палитру двух профилей.

ColorSync и OpenGL

ColorSync и OpenGL могут использоваться для выполнения коррекции цвета в реальном времени и улучшения видео. В прошлом это было только возможно на очень высокопроизводительных аппаратных средствах, но теперь они могут быть сделаны на настольных машинах вследствие доступности высокоэффективных видеокарт.

Много современных видеокарт имеют поддержку 3-го поиска текстуры на пиксель. Это в настоящее время доступно на следующих видеокартах:

Путем загрузки трансформаций коррекции цвета в эти таблицы можно выполнить коррекцию цвета в реальном времени. Это довольно мощно, и это демонстрирует интеграцию всех графических технологий, доступных в Mac OS X. Это комбинирует преимущества и полномочия ColorSync, OpenGL, QuickTime и Кварца.

Путем это работает, содержание QuickTime, играется на Кварце поверхность OpenGL и присоединяется к той поверхности, 3D текстура, созданная из цветной мировой ссылки ColorSync.

Чтобы упростить для приложений делать это, некоторый APIs был добавлен к ColorSync. Первое CMMakeProfile. Это - функция общего назначения, позволяющая Вам создавать профиль ColorSync, данный a CFDictionary из атрибутов. Например, можно использовать этот API для создания абстрактного профиля, чтобы выполнить вращение оттенка, установить контраст, и т.д. Можно также использовать этот API для создания стандартных профилей RGB.

Вот определение для CMMakeProfile функция:

CMMakeProfile

CMMakeProfile  CMError CMMakeProfile(CMProfileRef prof,                       CFDictionaryRef spec)

Описание

Добавляют надлежащие теги к профилю для создания дисплея или абстрактного профиля на основе словаря спецификации.

Параметры

профессор (в/)

профиль для изменения

спецификация (в)

словарь спецификации

Один ключ в словаре спецификации должен быть»profileType«который должен иметь a CFString значение»abstractLab", "displayRGB«или»displayID«. Это может также содержать ключи/значения:

"description" CFString (дополнительный)

"copyright" CFString (дополнительный)

Для profileType из»abstractLab«, словарь должен также содержать ключи/значения:

"gridPoints" CFNumber(SInt32) (должно быть нечетным),

"proc" CFNumber(SInt64)

(принужденный от a LabToLabProcPtr)

"refcon" CFNumber(Дополнительный) (SInt64)

(принужденный от недействительного)

Для profileType из»displayRGB«, словарь должен также содержать ключи/значения:

"targetGamma" CFNumber(Float) (например, 1.8) (дополнительный)

"targetWhite" CFNumber(SInt32) (например, 6500) (дополнительный)

"gammaR" CFNumber(Float) (например, 2.5)

"gammaG" CFNumber(Float) (например, 2.5)

"gammaB" CFNumber(Float) (например, 2.5)

"tableChans" CFNumber(SInt32) (1 или 3) (дополнительный)

"tableEntries" CFNumber(SInt32) (например, 16 или 255) (дополнительный)

"tableEntrySize" CFNumber(SInt32) (1 или 2) (дополнительный)

"tableData" CFData (lut в порядке RRRGGGBBB) (дополнительный)

также

"phosphorRx" CFNumber(Float)

"phosphorRy" CFNumber(Float)

"phosphorGx" CFNumber(Float)

"phosphorGy" CFNumber(Float)

"phosphorBx" CFNumber(Float)

"phosphorBy" CFNumber(Float)

или

"phosphorSet" CFString ("WideRGB«, «700/525/450nm»,

"P22-EBU", "HDTV", "CCIR709", "sRGB",

"AdobeRGB98«или»Trinitron")

также

"whitePointx" CFNumber(Float)

"whitePointy" CFNumber(Float)

или

"whiteTemp" CFNumber(SInt32) (например, 5000, 6500, 9300)

Для profileType из»displayID«, словарь должен также содержать ключи/значения:

"targetGamma" CFNumber(Float) (например, 1.8) (дополнительный)

"targetWhite" CFNumber(SInt32) (например, 6500) (дополнительный)

"displayID CFNumber(SInt32)

Дополнительно, ключи/значения для»displayRGB«может быть предоставлен для переопределения значений от дисплея.

Вот отрывок короткого кода, показывающий, как использовать CMMakeProfile сделать абстрактный профиль:

void myLabToLabProc(float* L, float* a, float* b, void* refcon)
{
    float angle = *(float*)refcon;
    float aa = (*a), bb = (*b);
    *a = aa*cos(angle) - bb*sin(angle);
    *b = aa*sin(angle) + bb*cos(angle);
}

void makeAbstractWithAngle (CMProfileRef prof, float angle)
{
    CFDictionaryRef dict;
    SInt64 cb64, rc64;
    SInt32 gridPoints;
    CFStringRef keys[4];
    CFTypeRef vals[4];
    CMError cmErr;

    keys[0] = CFSTR("profileType");
    vals[0]= CFSTR("abstractLab");

    gridPoints = 33;
    keys[1] = CFSTR("gridPoints");
    vals[1]= CFNumberCreate(0, kCFNumberSInt32Type, &gridPoints);

    cb64 = (SInt64) myLabToLabProc;
    keys[2] = CFSTR("proc");
    vals[2]= CFNumberCreate(0, kCFNumberSInt64Type, &cb64);

    rc64 = (SInt64) ∠
    keys[3] = CFSTR("refcon");
    vals[3]= CFNumberCreate(0, kCFNumberSInt64Type, &rc64);

    dict = CFDictionaryCreate(nil, keys, vals, 4,
                &kCFTypeDictionaryKeyCallBacks,
                &kCFTypeDictionaryValueCallBacks);

    cmErr = CMMakeProfile(prof, dict);

    CFRelease(vals[1]); CFRelease(vals[2]); CFRelease(vals[3]);
    CFRelease(dict);
}

Второй API, добавленный для поддержки коррекции цвета в реальном времени видео, CWFillLookupTexture. Этот API заполняет 3D текстуру поиска от colorworld. Получающаяся таблица подходит для использования в OpenGL для ускорения управления цветом в аппаратных средствах.

Вот формальное определение для CWFillLookupTexture:

CWFillLookupTexture

CWFillLookupTexture

          CMError CWFillLookupTexture( CMWorldRef cw,
                                       UInt32 gridPoints,
                                       UInt32 format,
                                       UInt32 dataSize,
                                       void * data)

Описание

Этот API заполняет 3D текстуру поиска от colorworld. Получающаяся таблица подходит для использования в OpenGL для ускорения управления цветом в аппаратных средствах.

Параметры

по часовой стрелке (в)

colorworld для использования

gridPoints (в)

число узлов решетки на канал в текстуре

формат (в)

формат пикселей в текстуре (например. cmTextureRGBtoRGBX8)

размер данных (в)

размер в байтах данных текстуры для заполнения

данные (в/)

указатель для текстурирования данных для заполнения

Вот отрывок короткого кода, показывающий, как использовать CWFillLookupTexture:

void* make_3d_texture(CMProfileRef src, CMProfileRef abs, CMProfileRef dst)
{
    UInt32 size, grid = 9, fmt = cmTextureRGBtoRGBX8;
    CMWorldRef cw;
    void* data;
    CMError err;

    cw = make_colorworld(src, abs, dst);
    err = CWFillLookupTexture(cw, grid, fmt, &size, nil);
    data = malloc(size);
    err = CWFillLookupTexture(cw, grid, fmt, &size, &data);

    return data;
}

Кроме того, пример кода доступен в Инструментах Разработчика Mac OS X, который демонстрирует использование вышеупомянутого APIs для выполнения коррекции цвета в реальном времени. Загрузите и установите Инструменты Разработчика Mac OS X и ищите выборку «ColorWhirled» здесь:

/Developer/Examples/ColorSync/ColorWhirled

ColorSync и QuickTime

QuickTime 6.4 представляет новые графические функции средства импорта такой как GraphicsImportSetDestinationColorSyncProfileRef это предоставляет поддержку для ColorSync в Mac OS X. Эти функции делают ColorSync, соответствующий поведение по умолчанию для исходных приложений, использующих графические средства импорта, т.е. для файлов образа со встроенными профилями ColorSync и для файлов образа с данными изображения CMYK, с или без встроенных профилей ColorSync.

Флаг уклонения предоставлен для приложений тот вызов ColorSync непосредственно.

Для полного списка этих новых функций посмотрите Новые функции и возможности в документе QuickTime 6.4.

ColorSync и захват изображения

По умолчанию Захват изображения зарегистрирует Универсальный профиль камеры для всех устройств, таким образом, все загруженные изображения будут присвоены профиль. Дополнительно, можно указать профиль, который будет встроен в изображения, которые Вы загружаете или сканируете. Используйте ICADownloadFile функция вместе с kEmbedColorSyncProfile флаг.

Дополнительную информацию см. в Захвате изображения SDK.

Калибровка дисплея

Калибровка дисплея предоставляет пользователю возможность автоматически генерировать профили для дисплея и калибровать дисплей простым в использовании способом. Калибровка дисплея выполняется путем нажимания кнопки «Calibrate» в предпочтениях Дисплея (найденный в Установках системы).

Обычно, эта кнопка просто запустит калибратор Apple. Однако эта архитектура поддерживает сторонние калибраторы также.

Существует несколько простых модификаций, которые необходимо будет сделать к калибратору для него, чтобы быть распознанными ColorSync. Вот быстрая сводка:

Поддерживайте для своего калибратора

  • Создайте свое калибровочное приложение Углерода или Какао, как Вы обычно были бы

  • Добавьте новый CSDisplayCalibrator ключ к Info.plist

  • Поддерживайте новое дополнительное свойство в'oapp'AppleEvent

  • Установите свой калибратор (или символьная ссылка к нему) в/Library/ColorSync/Calibrators/

Для запущения Вас существует калибратор в качестве примера, в котором это установлено с Инструментами Разработчика:

/Developer/Examples/ColorSync/

Ищите проект «DemoCalibrator». Этот пример кода демонстрирует, как сделать вышеупомянутые модификации к калибратору. Используйте эту выборку в качестве начальной точки для Вашего калибратора.

Чтобы видеть, как это работает, создайте демонстрационный калибратор и установите встроенную исполнимую программу в/Library/ColorSync/Calibrators/. Теперь перейдите к Предпочтениям Дисплея (в Установках системы), щелкните по вкладке «Color» и нажмите кнопку «Calibrate». Это переведет в рабочее состояние новое диалоговое окно, позволяющее пользователю выбирать который из установленных калибраторов для использования. Вот то, как смотрит диалоговое окно:

  Диалоговое окно рисунка 23 для выбора Calibrator.

Режим эксперта по калибратору Apple

Опытный режим доступен для калибратора Apple. Для наблюдения этого в действии перейдите к Предпочтениям Дисплея, щелкните по вкладке «Color», затем нажмите кнопку «Calibrate» и наконец выберите «Display Calibrator» (калибратор Apple) в списке. Теперь нажмите кнопку «Calibrate», и в получающемся окне щелкают по опытному флажку режима для включения опытного режима.

Калибратор Apple имеет возможность показать единственный патч и возможность скорректировать оттенок/регулировку яркости, допускающий намного более прекрасное управление. Это было необходимо, потому что очень трудно для пользователей скорректировать синюю гамму, поскольку это менее видимо к человеческому глазу.

Калибратор Apple также допускает многократные шаги. Это означает в дополнение к корректирующимся полутонам, можно скорректировать выделения, тени и темные тени. Это приведет к хорошей калибровке на жидкокристаллических дисплеях, имеющих сложные гамма кривые.

Калибратор Apple также позволяет калибровочному профилю использоваться другими пользователями на той же машине.

SIPS

SIPS обозначает: Система обработки изображений Scriptable. SIPS создавался, потому что было определено, что была потребность в инструменте, который выполнит много общих операций на файлах образа scriptable способом.

В настоящий момент существует много существующих технологий, предусматривающих манипуляции изображениями. Например, Сценарии ColorSync могут выполнить много операций ColorSync, таких как согласование цветов изображений, но это не может повернуть, масштабировать или преобразовать форматы. Сценарии Захвата изображения могут повернуть и масштабировать изображения, но они не могут окрасить соответствие или преобразовать форматы. Наконец, приложение Предварительного просмотра может вращаться, масштаб и тайные форматы, но это не Apple-scriptable.

SIPS объединяет все эти различные технологии для обеспечения единственного инструмента, с которым можно выполнить общие операции на изображениях. Текущий набор функций для SIPS включает:

Возможные функции будущих выпусков SIPS включают:

SIPS в настоящее время реализуется как простой скомпилированный инструмент, установленный в/usr/bin/sips. Это соединяется против CoreGraphics, QuickTime и ColorSync. Это может воздействовать на один или несколько файлов за один раз. Это может запросить или изменить изображения или профили. Запросы SIPS могут возвратить свойства в простой текстовой форме или в форме XML. Действия могут изменить оперативные файлы или к выходному каталогу.

Поскольку SIPS является простым инструментом командной строки существует много способов использовать его. Это может быть вызвано от терминальной оболочки, от AppleScript, с других языков сценариев или из приложения с помощью C код (AppKit или вызовы Posix).

Например, откройте Terminal и тип sips --help. Это даст страницу справки для SIPS (стандартная страница справочника будет предстоящей). Вот вывод, который Вы будете видеть:

$ sips --help

sips 1.0 - scriptable image processing system.
This tool is used to query or modify raster image files and ColorSync ICC profiles.
Its functionality can also be used through the "Image Events" AppleScript suite.
Usages:
sips [-h, --help] 
sips [-H, --helpProperties] 
sips [image query functions] imagefile(s) 
sips [profile query functions] profile(s) 
sips [image modification functions] imagefile(s) 
[--out outimage | --out outdir] 
sips [profile modification functions] profile(s) 
[--out outprofile | --out outdir] Profile query functions: 
-g, --getProperty key 
-X, --extractTag tag tagFile 
-v, --verify 
Image query functions: 
-g, --getProperty key 
-x, --extractProfile profile 
Profile modification functions: 
-s, --setProperty key value 
-d, --deleteProperty key 
--deleteTag tag 
--copyTag srcTag dstTag 
--loadTag tag tagFile 
--repair 
Image modification functions: 
-s, --setProperty key value 
-d, --deleteProperty key 
-e, --embedProfile profile 
-E, --embedProfileIfNone profile 
-m, --matchTo profile 
-M, --matchToWithIntent profile intent 
-r, --rotate degreesCW 
-f, --flip horizontal|vertical 
-c, --cropToHeightWidth pixelsH pixelsW 
-p, --padToHeightWidth pixelsH pixelsW 
-z, --resampleHeightWidth pixelsH pixelsW 
--resampleWidth pixelsW 
--resampleHeight pixelsH 
-Z, --resampleHeightWidthMax pixelsWH 
-i, --addIcon

Вот пример простой команды SIPS для вращения изображения 30 градусов:

$sips -r 30 /Users/steve/image.JPG

Вот пример простой команды SIPS для получения свойства изображения (высота изображения).

Во-первых, получите список доступных свойств изображения с --helpProperties команда:

$sips --helpProperties

  Special properties: 
    all                  binary data
    allxml               binary data
  Image properties: 
    dpiHeight            float 
    dpiWidth             float 
    pixelHeight          integer (read-only)
    pixelWidth           integer (read-only)
    format               string  jpeg | tiff | png | gif | jp2 | pict | bmp | qtif | psd
    formatOptions        string  default | [low|normal|high] | packbits
    space                string (read-only)
    samplesPerPixel      integer (read-only)
    bitsPerSample        integer (read-only)
    creation             string (read-only)
    make                 string 
    model                string 
    software             string (read-only)
    description          string 
    copyright            string 
    artist               string 
    profile              binary data
  Profile properties: 
    description          utf8 string
    size                 integer (read-only)
    cmm                  string 
    version              string 
    class                string (read-only)
    space                string (read-only)
    pcs                  string (read-only)
    creation             string 
    platform             string 
    quality              string  normal | draft | best
    deviceManufacturer   string 
    deviceModel          integer
    deviceAttributes0    integer
    deviceAttributes1    integer
    renderingIntent      string  perceptual | relative | satuation | absolute
    creator              string 
    copyright            string 
    md5                  string (read-only)

Затем дайте команду с помощью спецификатора свойства изображения:

$ sips -g dpiHeight image.JPG  image.JPG   dpiHeight: 216.000

ColorSync изменяет для Mac OS X 10.4 Тайгера

Поддержка с плавающей точкой

Одна из целей Тайгера состояла в том, чтобы обеспечить новое высокое качество, кинематографическую графическую среду. Для достижения этого полная поддержка с плавающей точкой была необходима всюду по всей операционной системе с ColorSync как один из ключевых компонентов.

Новая структура: CMFloatBitmap

Для обеспечения этой новой графической среды ColorSync представил новую растровую структуру CMFloatBitmap поддерживать произвольные битовые массивы и данные с плавающей запятой. Одна из целей проекта для этой структуры состояла в том, чтобы сделать его максимально гибким, таким образом, разработчики не будут обязаны перепаковывать данные прежде, чем передать его ColorSync.

Перечисление 3  CMFloatBitmap структура.

/*
 *  CMFloatBitmap
 * 
 *  Summary:
 *    A new structure that defines and arbitrary map of float color
 *    values.
 * 
 *  Discussion:
 *    The structure defines a pixel array of dimensions
 * [height][width][chans] where 'chans' is the number of channels in
 *    the colorspace plus an optional one for alpha. The actual memory
 *    pointed to by the structure can contain a variety of possible
 *    arrangements. The actual data values can be chunky or planar.
 *    The channels can by in any order. 
 * 
 *    Examples: 
 *    a) float* p contains a 640w by 480h bitmap of chunky RGB data 
 *        CMFloatBitmap map = { 0,         // version 
 *                    {p, p+1, p+2},       // base addrs of R,G,B 
 *                    480, 640,            // height, width 
 *                    640*3,               // rowStride 
 *                    3,                   // colStride 
 *                    cmRGBData, 
 *                    kCMFloatBitmapFlagsNone}; 
 *    b) float* p contains a 640w by 480h bitmap of chunky BGRA data 
 *        CMFloatBitmap map = { 0,         // version 
 *                    {p+2, p+1, p, p+3},  // base addrs of R,G,B,A 
 *                    480, 640,            // height, width 
 *                    640*4,               // rowStride 
 *                    3,                   // colStride 
 *                    cmRGBData, 
 *                    kCMFloatBitmapFlagsAlpha}; 
 *    c) float* p contains a 640w by 480h bitmap of planar CMYK data 
 *        CMFloatBitmap map = { 0,        // version 
 *                    {p, p+640*480 , p+2*640*480 , p+3*640*480}, 
 *                    480, 640,           // height, width 
 *                    640,                // rowStride 
 *                    1,                  // colStride 
 *                    cmCMYKData, 
 *                    kCMFloatBitmapFlagsNone};
 */
struct CMFloatBitmap {

  /*
   * The version number of this structure to allow for future
   * expansion. Should contain 0 for now.
   */
  unsigned long       version;

  /*
   * The base address for each channel in canonical order. The
   * canonical order for RGB is R,G,B. CMYK is C,M,Y,K etc. A maximum
   * of sixteen channels is supported. Another way to think of this is
   * buffers[c] = &(pixelArray[0][0][c])
   */
  float *             buffers[16];

  /*
   * The height (in pixels) of the bitmap.
   */
  size_t              height;

  /*
   * The width (in pixels) of the bitmap.
   */
  size_t              width;

  /*
   * The number of floats to skip to move from one row to the next.
   * This is typically (width*chans) for chunky pixel buffers or
   * (width) for planar. Can be negative if the image is vertically
   * flipped.
   */
  ptrdiff_t           rowStride;

  /*
   * The number of floats to skip to move from one column to the next.
   * This is typically (chans) for chunky pixel buffers or (1) for
   * planar. Can be negative if the image is horizontally flipped.
   */
  ptrdiff_t           colStride;

  /*
   * The colorspace of the data (e.g cmRGBdata cmCMYKData)
   */
  OSType              space;

  /*
   * Holds bits to specify the alpha type of the data. The remaining
   * bits are reserved for future use.
   */
  CMFloatBitmapFlags  flags;
};
typedef struct CMFloatBitmap            CMFloatBitmap;

Это новое CMFloatBitmap структура поддерживает и планарные и короткие расположения данных. Каждому каналу разрешают иметь различный базовый адрес, а не единственный базовый адрес для всех пиксельных данных. Это позволяет каналам быть в любом произвольном порядке. Кроме того, при требовании необычной упаковки между каналами, или если данные должны быть отсканированы в обратном порядке, структура допускает и rowbytes и columnbytes, который будет указан.

Новый APIs

Много новых APIs были представлены для работы с CMFloatBitmap структура. Они описаны ниже.

CMFloatBitmapMakeChunky

Большинство разработчиков укажет буфер коротких или чередованных данных с CMFloatBitmap структура, таким образом, существует новая служебная функция CMFloatBitmapMakeChunky который заполнит структуру соответственно. Вы просто предоставляете единственный базовый адрес. Вот то, как это смотрит:

Перечисление 4  CMFloatBitmapMakeChunky функция.

/*
 *  CMFloatBitmapMakeChunky()
 * 
 *  Summary:
 *    A handy funtion to fill in a CMFloatBitmap.
 * 
 *  Discussion:
 *    Returns a filled in CMFloatBitmap structure given a single buffer
 *    of chunky data with no alpha.
 * 
 *  Parameters:
 * 
 *    buffer:
 * (in) address of interleaved data
 * 
 *    height:
 * (in) height of bitmap in pixels
 * 
 *    width:
 * (in) width of bitmap in pixels
 * 
 *    space:
 * (in) colorsapce of the data
 * 
 *  Result:
 *    a filled in CMFloatBitmap
 * 
 *  Availability:
 *    Mac OS X: in version 10.4 and later in ApplicationServices.framework
 *    CarbonLib: not available
 *    Non-Carbon CFM: not available
 */
extern CMFloatBitmap 
CMFloatBitmapMakeChunky(
  float *  buffer,
  size_t   height,
  size_t   width,
  OSType   space) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;

Независимо от того, заполняете ли Вы структуру вручную или вызываете помощника API, можно тогда использовать ColorSync для соответствия данных, определенных любым битовым массивом с плавающей точкой. Существует три новых функции, чтобы сделать это:

CMConvertXYZFloatBitmap

CMConvertXYZFloatBitmap преобразует CMFloatBitmap структуры через весь CIE связали цветовые пространства: XYZ, Yxy, Лаборатория и Любовь.

Перечисление 5  CMConvertXYZFloatBitmap функция.

/*
 *  CMConvertXYZFloatBitmap()
 * 
 *  Summary:
 *    Used to convert CMFloatBitmaps between the related colorspaces
 *    XYZ, Yxy, Lab, and Luv.
 * 
 *  Discussion:
 *    The buffer data from the source CMFloatBitmap is converted into
 *    the buffer data specified the destination CMFloatBitmap. 
 *    Converion "in-place" is allowed.
 * 
 *  Parameters:
 * 
 *    src:
 * (in) description of source data buffer to convert from
 * 
 *    srcIlluminantXYZ:
 * (in) required if src->space is XYZ or Yxy
 * 
 *    dst:
 * (in,out) description of destination data buffer to convert to
 * 
 *    dstIlluminantXYZ:
 * (in) required if dst->space is XYZ or Yxy
 * 
 *    method:
 * (in) the chromatic adaptation method to use
 * 
 *  Availability:
 *    Mac OS X: in version 10.4 and later in ApplicationServices.framework
 *    CarbonLib: not available
 *    Non-Carbon CFM: not available
 */
extern CMError 
CMConvertXYZFloatBitmap(
  const CMFloatBitmap *   src,
  const float             srcIlluminantXYZ[3],
  CMFloatBitmap *         dst,
  const float             dstIlluminantXYZ[3],
  CMChromaticAdaptation   method) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;

CMConvertRGBFloatBitmap

CMConvertRGBFloatBitmap преобразует CMFloatBitmap структуры через RGB получили пробелы: RGB, HSV и HLS.

Перечисление 6  CMConvertRGBFloatBitmap функция.

/*
 *  CMConvertRGBFloatBitmap()
 * 
 *  Summary:
 *    Used to convert CMFloatBitmaps between the related colorspaces
 *    RGB, HSV, and HLS.
 * 
 *  Discussion:
 *    The buffer data from the source CMFloatBitmap is converted into
 *    the buffer data specified the destination CMFloatBitmap. 
 *    Converion "in-place" is allowed.
 * 
 *  Parameters:
 * 
 *    src:
 * (in) description of source data buffer to convert from
 * 
 *    dst:
 * (in,out) description of destination data buffer to convert to
 * 
 *  Availability:
 *    Mac OS X: in version 10.4 and later in ApplicationServices.framework
 *    CarbonLib: not available
 *    Non-Carbon CFM: not available
 */
extern CMError 
CMConvertRGBFloatBitmap(
  const CMFloatBitmap *  src,
  CMFloatBitmap *        dst) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;

Обе из этих функций основываются на известных формулах учебника, таким образом, нет никакой потребности передать в профиле или colorworld для обработки преобразования. Вместо этого эти функции выполнят математические вычисления для Вас с точностью с плавающей точкой.

CMMatchFloatBitmap

CMMatchFloatBitmap окрасит битовые массивы плавающей точки соответствия. Можно передать в цветной мировой ссылке для выполнения фактической трансформации. Можно создать цветной мир путем конкатенации одного или более профилей. Данные тогда отправляются через CMM, и если CMM будет поддерживать данные с плавающей запятой, то трансформация будет выполняться с помощью полной точности с плавающей точкой.

Перечисление 7  CMMatchFloatBitmap функция.

/*
 *  CMMatchFloatBitmap()
 * 
 *  Summary:
 *    Used to convert CMFloatBitmaps using a CMWorldRef.
 * 
 *  Discussion:
 *    The buffer data from the source CMFloatBitmap is converted into
 *    the buffer data specified the destination CMFloatBitmap. 
 *    Converion "in-place" is allowed.
 * 
 *  Parameters:
 * 
 *    cw:
 * (in) the CMWorldRef to convert with
 * 
 *    src:
 * (in) description of source data buffer to convert from
 * 
 *    dst:
 * (in,out) description of destination data buffer to convert to
 * 
 *  Availability:
 *    Mac OS X: in version 10.4 and later in ApplicationServices.framework
 *    CarbonLib: not available
 *    Non-Carbon CFM: not available
 */
extern CMError 
CMMatchFloatBitmap(
  CMWorldRef             cw,
  const CMFloatBitmap *  src,
  CMFloatBitmap *        dst) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;

Использование CFTypes

CMProfileRef и CMWorldRef являются теперь CFType

ColorSync теперь более близко интегрируется с Базовыми типами Основы (CFType объекты). Два общих непрозрачных типа данных ColorSync, CMProfileRef и CMWorldRef, теперь CFType объекты. Это очень удобно, потому что можно теперь использовать Базовые функции Основы такой как CFRetained и CFRelease с этими типами данных, и можно также добавить профили или окрасить миры к CFDictionaries и CFArrays. Если Вы являетесь передающими, это удобно CFDictionaries и цветные миры вокруг в различных частях Вашего кода.

CMProfileCopyICCData

CMProfileCopyICCData функция позволяет Вам извлечь данные из профиля. В прошлом это было сделано путем вызова CMCopyProfile или CMFlattenProfile функции и это были немного большим количеством работы. Теперь, весь процесс намного проще. Просто вызовите CMProfileCopyICCData и это возвратит Вас все данные в профиле как одно большое CFData объект.

Перечисление 8  CMProfileCopyICCData функция.

/*
 *  CMProfileCopyICCData()
 * 
 *  Summary:
 *    Return a copy of the icc data specified by `prof'.
 * 
 *  Parameters:
 * 
 *    allocator:
 * (in) The object to be used to allocate memory for the data
 * 
 *    prof:
 * (in) The profile to query
 * 
 *  Availability:
 *    Mac OS X: in version 10.4 and later in ApplicationServices.framework
 *    CarbonLib: not available
 *    Non-Carbon CFM: not available
 */
extern CFDataRef 
CMProfileCopyICCData(
  CFAllocatorRef   allocator,
  CMProfileRef     prof) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;

Изменения API

Ниже обсуждение изменений APIs для ColorSync в Mac OS X 10.4 Тайгера.

Некоторые значения по умолчанию/предпочтения ColorSync APIs должны быть осуждены

Несколько лет назад одна опция, добавленная к ColorSync и в API и в уровне пользовательского интерфейса, была рядом Предпочтений ColorSync и Поддержки APIs, чтобы позволить приложениям указать профили по умолчанию на основе использования и цветового пространства. Цель этого APIs состояла в том, чтобы упростить пользовательский интерфейс через большое разнообразие приложений. На практике очень немного приложений использовали этот APIs. Кроме того, разработчики указали, что они перепутаны с пользовательским интерфейсом в Утилите Colorsync, потому что любые изменения, внесенные в настройках, кажется, не имеют вида noticable эффекта.

В результате этот APIs осуждается вместе с пользовательским интерфейсом. Однако существующие приложения, использующие этот APIs, должны функционировать правильно, таким образом, было изменено поведение следующих функций:

CMGetDefaultProfileBySpace/SetDefaultProfileBySpace

CMGetDefaultProfileByUse/SetDefaultProfileByUse

CMGetPreferredCMM

Эти функции теперь сохранят свои предпочтения в домене:

Текущее Приложение / Текущий Узел / Текущий Пользователь

вместо того, чтобы хранить их как установку, которая является глобальной переменной через машину.

Снова, этот APIs будет продолжать работать, но теперь осуждается.

Пользовательский CMMs

Упомянутый ниже изменения для Пользовательского CMM's в Mac OS X 10.4 Тайгера.

Кварц и Распечатывающий Графические системы будет теперь только использовать Apple CMM

Новые изменения в управлении цветом в Mac OS X 10.4 Тайгера привели к более трудной и более эффективной интеграции между Кварцем и Распечатывающий графические системы. Однако для Кварца и Распечатывающий графические системы для работы при пиковой производительности и надежности было необходимо ограничить их для использования только Apple CMM.

Приложения могут все еще запросить пользовательское использование CMM NCWConcatColorWorld и явно соответствовать данные

ColorSync в течение длительного времени теперь позволял разработчикам создавать свой собственный CMM's, и он также позволил приложениям использовать этот сторонний CMM's в своих приложениях. С Mac OS X 10.4 Тайгера приложения могут все еще вызвать третье лицо, CMMs и explicity создают цветные миры с помощью этих CMMs. Это может быть сделано с рекомендуемым API NCWConcatColorWorld который позволяет Вам указать идентификатор CMM в NCMConcatProfileSet структура.

Новая точка входа CMMMatchFloatMap

Кроме того, существует новая точка входа для CMMs: CMMMatchFloatMap. Если Ваш CMM будет поддерживать это, то это предоставит Вам полный доступ к новой поддержке с плавающей точкой, предоставленной всюду по Кварцевой системе. Если Вы не будете поддерживать это, то Ваши данные будут усеченными к 16-разрядному целому числу.

Изменения в утилите ColorSync

В этом разделе рассматриваются изменения в Утилите ColorSync.

Удаление предпочтительной области

Как описано в Изменениях API, мы осуждаем Предпочтения APIs для профилей по умолчанию. В результате мы удаляем пользовательский интерфейс для области Preferences в Утилите Colorsync.

Новая цветная область калькулятора

Мы добавили новую утилиту под названием Цветной Калькулятор. Эта утилита позволяет Вам легко выполнить преобразования цветового пространства с точностью с плавающей точкой. Вот снимок экрана, показывающий, как это смотрит:

<ИЗОБРАЖЕНИЕ>

Ссылки



История версии документа


ДатаПримечания
10.08.2005

Описывает изменения ColorSync для Mac OS X 10.4 «Тигров»

25.06.2004

Разные изменения форматирования.

16.06.2004

Описывает изменения ColorSync для Mac OS X 10.3

10.02.2003

Новый документ, описывающий ColorSync, существенно интегрирующийся в Mac OS X.