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
- Diferenças entre cabeçalhos V4 e V5
- Bitmap.exe: um utilitário de Command-Line para converter cabeçalhos de bitmap
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 |