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 nº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 |