Uso de estruturas no WCS 1.0

A maioria das estruturas usadas pelo WCS 1.0 é muito simples e exige pouca explicação. Eles estão documentados na seção Referência do WCS 1.0 intitulada Estruturas.

Exceções são a estrutura COLORMATCHSETUPW usada pela função SetupColorMatchingW e as seguintes estruturas do Windows definidas em Wingdi.h:

Os tópicos a seguir são discutidos com mais comprimento:

Estruturas de cabeçalho de bitmap do Windows

O WCS 1.0 permite que os perfis de cores DO ICC sejam vinculados ou inseridos em DIBs (bitmaps independentes de dispositivo). Isso permite que as cores DIB sejam caracterizadas com mais precisão do que o possível usando o WCS no Windows 95. BITMAPV5HEADER , a nova estrutura de cabeçalho de bitmap, é definida em Wingdi.h na versão do Windows 98. Para fins de desenvolvimento, ele também está incluído no arquivo Icm.h com esta Referência do Programador. A estrutura BITMAPV5HEADER é a seguinte:

typedef struct {
    DWORD        bV5Size;
    LONG         bV5Width;
    LONG         bV5Height;
    WORD         bV5Planes;
    WORD         bV5BitCount;
    DWORD        bV5Compression;
    DWORD        bV5SizeImage;
    LONG         bV5XPelsPerMeter;
    LONG         bV5YPelsPerMeter;
    DWORD        bV5ClrUsed;
    DWORD        bV5ClrImportant;
    DWORD        bV5RedMask;
    DWORD        bV5GreenMask;
    DWORD        bV5BlueMask;
    DWORD        bV5AlphaMask;
    DWORD        bV5CSType;
    CIEXYZTRIPLE bV5Endpoints;
    DWORD        bV5GammaRed;
    DWORD        bV5GammaGreen;
    DWORD        bV5GammaBlue;
    DWORD        bV5Intent;         // Rendering intent for bitmap 
    DWORD        bV5ProfileData;    // Offset to profile data 
    DWORD        bV5ProfileSize;    // Size of embedded profile data 
    DWORD        bV5Reserved;       // Should be zero 
} BITMAPV5HEADER, FAR *LPBITMAPV5HEADER, *PBITMAPV5HEADER;

O membro bV5CSType pode ter os valores PROFILE_EMBEDDED ou PROFILE_LINKED para especificar se um perfil está inserido ou vinculado ao DIB. O membro bV5ProfileData é o deslocamento em bytes desde o início da estrutura BITMAPV5HEADER até o início dos dados do perfil. Se o perfil estiver inserido, os dados do perfil serão o perfil real e, se estiverem vinculados, os dados do perfil serão o nome do arquivo encerrado em nulo do perfil. Não pode ser uma cadeia de caracteres Unicode. Ele deve ser composto exclusivamente por caracteres do conjunto de caracteres do Windows (página de código 1252).

Quando um DIB é carregado na memória, os dados do perfil (se estiverem presentes) devem seguir a tabela de cores e bV5ProfileData deve fornecer o deslocamento dos dados do perfil desde o início da estrutura BITMAPV5HEADER . O valor desse membro será diferente agora, pois os bits de bitmap não seguem a tabela de cores na memória. Os aplicativos devem modificar o membro bV5ProfileData depois de carregar o DIB na memória.

Para DIBs empacotados, os dados de perfil devem seguir os bits de bitmap semelhantes ao formato de arquivo. O membro bV5ProfileData ainda deve fornecer o deslocamento dos dados de perfil desde o início da estrutura BITMAPV5HEADER .

Os aplicativos devem acessar os dados de perfil somente quando bV5Size == sizeof ( BITMAPV5HEADER ) ANDbV5CSType for PROFILE_EMBEDDED ou PROFILE_LINKED.

Se um perfil estiver vinculado, o caminho do perfil poderá ser qualquer nome totalmente qualificado (incluindo um caminho de rede) que possa ser aberto usando a função CreateFile do Win32.

Diferenças entre cabeçalhos V4 e V5

Ao trabalhar com a nova estrutura de bitmap, é útil reconhecer diferenças em como as estruturas BITMAPV4HEADER e BITMAPV5HEADER são configuradas:

Cabeçalho V4 Significado
bV4CSType LCS_CALIBRATED_RGB. Esse valor implica que os pontos de extremidade e os gammas são fornecidos nos campos apropriados. Valores falsos causam problemas.
bV4CSType LCS_sRGB. Esse valor implica que o bitmap está no espaço de cor sRGB (gammas e pontos de extremidade ignorados).
bV4CSType LCS_WINDOWS_COLOR_SPACE. Esse valor implica que o bitmap está no espaço de cores padrão do Windows.

 

Cabeçalho V5 Significado
bV5CSType LCS_CALIBRATED_RGB. Esse valor implica que os pontos de extremidade e os gammas são fornecidos nos campos apropriados. Valores falsos causam problemas.
bV5CSType LCS_sRGB. Esse valor implica que o bitmap está no espaço de cor sRGB (gammas e pontos de extremidade ignorados).
bV5CSType PROFILE_EMBEDDED. Esse valor implica que bV5ProfileData aponta para um buffer de memória que contém o perfil a ser usado (gammas e pontos de extremidade são ignorados).
bV5CSType PROFILE_LINKED. Esse valor implica que bV5ProfileData aponta para o nome do arquivo do perfil a ser usado (gammas e pontos de extremidade são ignorados).
bV5CSType LCS_WINDOWS_COLOR_SPACE. Esse valor implica que o bitmap está no espaço de cores padrão do Windows.

 

Para converter bitmaps mais antigos de e para a nova estrutura BITMAPV5HEADER , um arquivo de utilitário de conversão de linha de comando chamado Bitmap.exe está incluído na Referência do Programador do WCS 1.0.

BitMap.exe: um utilitário Command-Line para converter cabeçalhos de bitmap

Bitmap.exe é um utilitário de linha de comando localizado na pasta \Bin na pasta de instalação especificada. Ele modifica os cabeçalhos de bitmaps do Windows, permitindo converter bitmaps existentes de estruturas de cabeçalho BITMAPINFOHEADER e BITMAPV4HEADER para a estrutura BITMAPV5HEADER mais recente e novamente. A sintaxe da linha de comando é a seguinte:

BITMAP [/d] [/1|4|5] [/s] [/f] 
filename

As opções de linha de comando têm os seguintes efeitos.

Comutador Significado
/d Os valores padrão são inseridos automaticamente nos cabeçalhos convertidos.
/1 Converter os bitmaps especificados em BITMAPINFOHEADER
/4 Converter os bitmaps especificados em BITMAPV4HEADER
/5 Converter os bitmaps especificados em BITMAPV5HEADER
/f Força a conversão, mesmo que o bitmap já tenha o cabeçalho correto
/s Converte bitmaps na pasta especificada e todos os subdiretórios sob ela