Compartilhar via


Função CreateMultiProfileTransform (icm.h)

Aceita uma matriz de perfis ou um único perfil de link de dispositivo e cria uma transformação de cor que os aplicativos podem usar para executar o mapeamento de cores.

Sintaxe

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

Parâmetros

pahProfiles

Ponteiro para uma matriz de identificadores para os perfis a serem usados. A função determina se os HPROFILEs contêm informações de perfil do ICC (International Color Consortium) ou do WCS (Windows Color System) e as processa adequadamente. Quando perfis WCS válidos são retornados por OpenColorProfileW e WcsOpenColorProfileW, esses identificadores de perfil contêm a combinação de perfis DMP, CAMP e GMMP.

nProfiles

Especifica o número de perfis na matriz. O máximo é 10.

padwIntent

Ponteiro para uma matriz de intenções a serem usadas. Cada intenção é um dos seguintes valores:

INTENT_PERCEPTUAL

INTENT_SATURATION

INTENT_RELATIVE_COLORIMETRIC

INTENT_ABSOLUTE_COLORIMETRIC

OS GMMPs são uma generalização de intenções. Há duas possíveis fontes de intenções: o perfil de "destino" e o parâmetro de lista de intenções para CreateMultiProfileTransform. O termo "destino" não é usado, pois todos, exceto dois dos perfis no parâmetro de lista de perfis, servirão como primeiro destino e, em seguida, origem.

Para obter mais informações, consulte Intenções de renderização.

nIntents

Especifica o número de elementos na matriz de intenções: pode ser 1 ou o mesmo valor que nProfiles. Para matrizes de perfil que contêm perfis WCS, a primeira intenção de renderização é ignorada e apenas elementos nProfiles -1 são usados para essas matrizes de perfil. O número máximo de nIntents é 10.

dwFlags

Especifica sinalizadores usados para controlar a criação da transformação. Consulte Observações.

indexPreferredCMM

Especifica o índice baseado em um do perfil de cor que indica qual cmm (módulo de gerenciamento de cores) usar. O desenvolvedor de aplicativos pode permitir que o Windows escolha o CMM definindo esse parâmetro como INDEX_DONT_CARE. Confira Usar CMMs de terceiros do CMM (Módulos de Gerenciamento de Cores) que só estão disponíveis para fluxos de trabalho icc. As matrizes de perfil que contêm perfis WCS ignorarão esse sinalizador. Ele também é ignorado quando apenas perfis ICC são usados e quando o sinalizador WCS_ALWAYS é usado.

Valor retornado

Se essa função for bem-sucedida, o valor retornado será um identificador para a transformação de cores.

Se essa função falhar, o valor retornado será NULL. Para obter informações de erro estendidas, chame GetLastError.

Comentários

Se um perfil de link de dispositivo estiver sendo usado, a função falhará se nProfiles não estiver definido como 1.

A matriz de intenções especifica como os perfis devem ser combinados. A intenção né usada para combinar o perfil na matriz. Se apenas uma intenção for especificada, ela será usada para o primeiro perfil e todos os outros perfis serão combinados usando a intenção Match.

Os valores em dwFlags são destinados apenas como dicas. O módulo de gerenciamento de cores deve determinar a melhor maneira de usá-los.

Windows Vista: três novos sinalizadores foram adicionados que podem ser usados com dwFlags:

Sinalizador Descrição
PRESERVEBLACK Se esse bit for definido, o mecanismo de transformação inserirá o GMMP de geração preta apropriado como o último GMMP na sequência de transformação. Esse sinalizador funciona apenas em uma transformação WCS pura.
SEQUENTIAL_TRANSFORM Se esse bit for definido, cada etapa no pipeline de processamento do WCS será executada para cada pixel na imagem e nenhuma transformação de cor otimizada será criada. Esse sinalizador funciona apenas em uma transformação WCS pura. Restrições: uma transformação criada com o conjunto de sinalizadores SEQUENTIAL_TRANSFORM só pode ser usada no thread no qual ele foi criado e apenas para uma chamada de tradução de cores por vez. O COM deve ser inicializado antes de criar a transformação sequencial e deve permanecer inicializado durante o tempo de vida do objeto de transformação.
WCS_ALWAYS Se esse bit for definido, até mesmo as transformações do ICC usarão o caminho do código WCS.

Observação

SEQUENTIAL_TRANSFORM foi inadvertidamente omitido do cabeçalho icm.h no SDK do Windows Vista. Se você quiser usar o sinalizador SEQUENTIAL_TRANSFORM, defina-o em seu aplicativo da seguinte maneira:

#define SEQUENTIAL_TRANSFORM 0x80800000

Para obter detalhes, consulte Sinalizadores de criação de transformação do CMM. Todos os sinalizadores mencionados têm suporte para todos os tipos de transformações, exceto para FAST_TRANSLATE e USE_RELATIVE_COLORIMETRIC, que funcionam apenas em uma transformação icc-to-ICC pura.

A função CreateMultiProfileTransform é usada fora de um contexto de dispositivo. As cores podem mudar ao transformar de um perfil de cor para o mesmo perfil de cor. Isso ocorre devido a erros de precisão. Portanto, uma transformação de cor não deve ser executada nessas circunstâncias.

Recomendamos que haja apenas um GMMP entre um DMP de origem e de destino. As GBDs (descrições de limite de gama) são criadas com base nas combinações DMP/CAMP. Os GMMPs subsequentes usam os GDBs antes deles na cadeia de processamento até que exista um DMP/CAMP GBD em seguida na sequência a ser usada. Por exemplo, suponha uma sequência DMP1, CAMP1, GMMP1, GMMP2, GMMP3, DMP2, CAMP2, GMMP4, GMMP5, CAMP3, DMP3. Em seguida, GMMP1, GMMP2 usam GBD1 como origem e destino. Em seguida, o GMMP3 usa GBD1 como origem e GBD2 como destino. Em seguida, o GMMP4 usa GBD2 como origem e destino. Por fim, o GMMP5 usa GBD2 como origem e GBD3 como destino. Isso pressupõe que nenhum GMMP seja idêntico a um ao lado dele.

Para perfis WCS, recomendamos que as intenções de renderização sejam definidas como DWORD_MAX para usar o GMMP dentro do identificador de perfil do WCS. Isso ocorre porque a matriz de intenções de renderização tem precedência sobre as intenções de renderização ou os modelos de mapeamento de gama especificados ou contidos nos perfis especificados pelos HPROFILEs. A matriz de intenções de renderização faz referência ao GMMP padrão para essas intenções de renderização. Idealmente, apenas um mapeamento de gama é executado entre um dispositivo de origem e de destino definindo um ou outro GMMP como NULL ao criar o HPROFILE com informações de perfil do WCS. Qualquer aplicativo herdado que usa um DMP do WCS invocará uma sequência de GMMPs. Os GDBs são escolhidos com base em DMPs e CAMPs. Para limites de gama GMMP intermediários, os GBDs de origem e destino são usados.

Em resumo, se nIntents == 1, o primeiro GMM é definido com base no GMMP definido como padrão* para o valor padwIntent , a menos que esse valor seja DWORD_MAX, nesse caso, as informações gmm inseridas do segundo perfil são usadas (as informações gmm inseridas são um GMMP ou, no caso de um perfil ICC, o GMM de linha de base correspondente a** a intenção do cabeçalho do perfil). O restante dos GMMs é definido com base no GMMP definido como padrão* para RelativeColorimetric.

Se nIntents = nProfiles -1, cada GMM será definido com base no GMMP definido como padrão* para o valor na matriz padwIntent no índice correspondente, exceto quando os valores padwIntent são DWORD_MAX. Para valores na matriz padwIntent que são DWORD_MAX, os GMMs em posições correspondentes são definidos com base nas informações gmm inseridas do segundo dos dois perfis cujas gamas são mapeadas pelo GMM. (Novamente, as informações gmm inseridas são um GMMP ou, no caso de um perfil ICC, o GMM de linha de base correspondente a** a intenção do cabeçalho do perfil).

Se nIntents = nProfiles, a primeira intenção será ignorada e a função se comportará como no caso em que nIntents = nProfiles -1.

Qualquer outra combinação de padwIntents e nIntents retornará um erro.

* "set as default" significa que o GMMP padrão é consultado usando WcsGetDefaultColorProfile com seu parâmetro profileManagementScope definido como WCS_PROFILE_MANAGEMENT_SCOPE_CURRENT_USER. Isso pode retornar padrões atuais ou em todo o sistema, conforme descrito na documentação do WcsGetDefaultColorProfile.

** "GMM correspondente a" não significa "GMM do GMMP definido como padrão para". Em vez disso, significa "uma associação constante entre intenções de perfil ICC e algoritmos GMM de linha de base".

O suporte à transformação do WCS para perfis do ICC ColorSpace é limitado a perfis de colorspace RGB. Os seguintes tipos de perfil ICC não podem ser usados em uma transformação processada pelo CITE, seja uma transformação mista do WCS/ICC ou uma transformação all-ICC com WCS_ALWAYS definido:

  • Perfis colorspace não RGB
  • Perfis NamedColor
  • Perfis de n canais (em que n > 8)
  • Perfis deviceLink
  • Perfis abstratos

Requisitos

   
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho icm.h
Biblioteca Mscms.lib
DLL Mscms.dll

Confira também