Поделиться через


Функция CreateMultiProfileTransform (icm.h)

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

Синтаксис

HTRANSFORM CreateMultiProfileTransform(
  PHPROFILE pahProfiles,
  DWORD     nProfiles,
  PDWORD    padwIntent,
  DWORD     nIntents,
  DWORD     dwFlags,
  DWORD     indexPreferredCMM
);

Параметры

pahProfiles

Указатель на массив дескрипторов для используемых профилей. Функция определяет, содержат ли HPROFILES данные профиля Международного консорциума цветов (ICC) или Windows Color System (WCS), и обрабатывает их соответствующим образом. Если OpenColorProfileW и WcsOpenColorProfileW возвращают допустимые профили WCS, эти дескрипторы профилей содержат сочетание профилей DMP, CAMP и GMMP.

nProfiles

Указывает количество профилей в массиве. Максимальное значение — 10.

padwIntent

Указатель на массив намерений для использования. Каждое намерение является одним из следующих значений:

INTENT_PERCEPTUAL

INTENT_SATURATION

INTENT_RELATIVE_COLORIMETRIC

INTENT_ABSOLUTE_COLORIMETRIC

GMMP — это обобщение намерений. Существует два возможных источника намерений: профиль "назначение" и параметр списка намерений для CreateMultiProfileTransform. Термин "назначение" не используется, так как все профили, кроме двух, в параметре списка профилей будут служить сначала назначением, а затем источником.

Дополнительные сведения см. в разделе Намерения отрисовки.

nIntents

Указывает количество элементов в массиве намерений: может быть равно 1 или тому же значению, что и nProfiles. Для массивов профилей, содержащих профили WCS, первое намерение отрисовки игнорируется, и для этих массивов профилей используются только элементы nProfiles -1. Максимальное число объектов nIntents — 10.

dwFlags

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

indexPreferredCMM

Задает одноуровневый индекс цветового профиля, который указывает, какой модуль управления цветом (CMM) следует использовать. Разработчик приложения может разрешить Windows выбрать CMM, задав для этого параметра значение INDEX_DONT_CARE. См . статью Использование модулей управления цветом (CMM). Сторонние CMM доступны только для рабочих процессов ICC. Массивы профилей, содержащие профили WCS, игнорируют этот флаг. Он также игнорируется при использовании только профилей ICC и при использовании флага WCS_ALWAYS.

Возвращаемое значение

Если эта функция выполняется успешно, возвращаемое значение является дескриптором преобразования цвета.

Если эта функция завершается сбоем, возвращается значение NULL. Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError.

Комментарии

Если используется профиль связи устройства, функция завершится ошибкой, если для nProfiles не задано значение 1.

Массив намерений указывает, как следует объединять профили. N-енамерение используется для объединения n-гопрофиля в массиве. Если указано только одно намерение, оно используется для первого профиля, а все остальные профили объединяются с помощью намерения Match.

Значения в dwFlags предназначены только как указания. Модуль управления цветом должен определить оптимальный способ их использования.

Windows Vista: добавлены три новых флага, которые можно использовать с dwFlags:

Flag Описание
PRESERVEBLACK Если этот бит задан, подсистема преобразования вставляет соответствующее черное поколение GMMP в качестве последнего GMMP в последовательности преобразования. Этот флаг работает только в чистом преобразовании WCS.
SEQUENTIAL_TRANSFORM Если этот бит задан, каждый шаг в конвейере обработки WCS выполняется для каждого пикселя на изображении и не создается оптимизированное преобразование цвета. Этот флаг работает только в чистом преобразовании WCS. Ограничения. Преобразование, созданное с помощью набора флагов SEQUENTIAL_TRANSFORM, может использоваться только в потоке, в котором оно было создано, и только для одного вызова преобразования цвета за раз. COM должен быть инициализирован до создания последовательного преобразования и оставаться инициализированным в течение времени существования объекта преобразования.
WCS_ALWAYS Если этот бит задан, даже в преобразованиях all-ICC будет использоваться путь кода WCS.

Примечание

SEQUENTIAL_TRANSFORM непреднамеренно опущен в заголовке icm.h в пакете SDK для Windows Vista. Если вы хотите использовать флаг SEQUENTIAL_TRANSFORM, определите его в приложении следующим образом:

#define SEQUENTIAL_TRANSFORM 0x80800000

Дополнительные сведения см. в разделе Флаги создания преобразования CMM. Все упомянутые флаги поддерживаются для всех типов преобразований, за исключением FAST_TRANSLATE и USE_RELATIVE_COLORIMETRIC, которые работают только в чистом преобразовании icc to-ICC.

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

Рекомендуется, чтобы между исходным и целевым DMP был только один GMMP. Описания границ гаммы создаются на основе сочетаний DMP и CAMP. Последующие GMMP используют GDB-объекты, предшествующие им, в цепочке обработки до тех пор, пока не будет существовать DMP/CAMP GBD, следующий в последовательности для использования. Например, предположим, что последовательность DMP1, CAMP1, GMMP1, GMMP2, GMMP3, DMP2, CAMP2, GMMP4, GMMP5, CAMP3, DMP3. Затем GMMP1 и GMMP2 используют GBD1 в качестве источника и назначения. Затем GMMP3 использует GBD1 в качестве источника и GBD2 в качестве назначения. Затем GMMP4 использует GBD2 в качестве источника и назначения. Наконец, GMMP5 использует GBD2 в качестве источника и GBD3 в качестве назначения. При этом предполагается, что GMMP не идентичен следующему.

Для профилей WCS рекомендуется задать для намерений отрисовки значение DWORD_MAX, чтобы использовать GMMP в дескрипторе профиля WCS. Это связано с тем, что массив намерений отрисовки имеет приоритет над намерениями отрисовки или моделями сопоставления гаммы, заданными или содержащимися в профилях, заданных HPROFILEs. Массив намерений отрисовки ссылается на стандартный GMMP для этих намерений отрисовки. В идеале между исходным и конечным устройствами выполняется только одно сопоставление гаммы, при создании HPROFILE с данными профиля WCS для одного или другого GMMP имеет значение NULL . Любое устаревшее приложение, использующее DMP WCS, будет вызывать последовательность GMMP. GDB выбираются на основе dmp и CAMP. Для промежуточных границ гаммы GMMP используются исходные и целевые ГБД.

Таким образом, если nIntents == 1, то первый GMM задается на основе GMMP, заданного по умолчанию* для значения padwIntent , если это значение не DWORD_MAX. В этом случае используется внедренная информация GMM из второго профиля (внедренные сведения GMM — это GMMP или, в случае профиля ICC, базовый GMM, соответствующий** намерению из заголовка профиля). Остальная часть GMM задается на основе ПАРАМЕТРА GMMP, заданного по умолчанию* для RelativeColorimetric.

Если nIntents = nProfiles -1, то каждый GMM задается на основе GMMP, заданного по умолчанию* для значения в массиве padwIntent по соответствующему индексу, за исключением случаев, когда значения padwIntent DWORD_MAX. Для значений в массиве padwIntent , которые DWORD_MAX, ГММ в соответствующих положениях задаются на основе внедренных сведений GMM из второго из двух профилей, гаммы которых сопоставляются GMM. (Опять же, внедренная информация GMM является либо GMMP, либо, в случае профиля ICC, базовым GMM, соответствующим** намерению из заголовка профиля).

Если nIntents = nProfiles, то первое намерение игнорируется и функция ведет себя так же, как в случае nIntents = nProfiles -1.

Любая другая комбинация padwIntents и nIntents вернет ошибку.

* "задать как значение по умолчанию" означает, что запрос GMMP по умолчанию выполняется с помощью WcsGetDefaultColorProfile , а параметр profileManagementScope имеет значение WCS_PROFILE_MANAGEMENT_SCOPE_CURRENT_USER. Это может возвращать значения по умолчанию для текущего пользователя или всей системы, как описано в документации по WcsGetDefaultColorProfile.

** "GMM соответствует" не означает "GMM из GMMP, заданного по умолчанию для". Вместо этого это означает "постоянную связь между намерениями профиля ICC и базовыми алгоритмами GMM".

Поддержка преобразования WCS для профилей ICC ColorSpace ограничена профилями rgb colorspace. Следующие типы профилей ICC не могут использоваться в преобразовании, обрабатываемом CITE, либо в смешанном преобразовании WCS/ICC, либо в преобразовании all-ICC с WCS_ALWAYS набором:

  • Профили ColorSpace, отличные от RGB
  • Профили NamedColor
  • профили n-каналов (где n > 8)
  • Профили DeviceLink
  • Абстрактные профили

Требования

   
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Верхняя часть icm.h
Библиотека Mscms.lib
DLL Mscms.dll

См. также раздел