Estrutura GDIINFO (winddi.h)
A estrutura GDIINFO descreve os recursos gráficos de um determinado dispositivo.
Sintaxe
typedef struct _GDIINFO {
ULONG ulVersion;
ULONG ulTechnology;
ULONG ulHorzSize;
ULONG ulVertSize;
ULONG ulHorzRes;
ULONG ulVertRes;
ULONG cBitsPixel;
ULONG cPlanes;
ULONG ulNumColors;
ULONG flRaster;
ULONG ulLogPixelsX;
ULONG ulLogPixelsY;
ULONG flTextCaps;
ULONG ulDACRed;
ULONG ulDACGreen;
ULONG ulDACBlue;
ULONG ulAspectX;
ULONG ulAspectY;
ULONG ulAspectXY;
LONG xStyleStep;
LONG yStyleStep;
LONG denStyleStep;
POINTL ptlPhysOffset;
SIZEL szlPhysSize;
ULONG ulNumPalReg;
COLORINFO ciDevice;
ULONG ulDevicePelsDPI;
ULONG ulPrimaryOrder;
ULONG ulHTPatternSize;
ULONG ulHTOutputFormat;
ULONG flHTFlags;
ULONG ulVRefresh;
ULONG ulBltAlignment;
ULONG ulPanningHorzRes;
ULONG ulPanningVertRes;
ULONG xPanningAlignment;
ULONG yPanningAlignment;
ULONG cxHTPat;
ULONG cyHTPat;
LPBYTE pHTPatA;
LPBYTE pHTPatB;
LPBYTE pHTPatC;
ULONG flShadeBlend;
ULONG ulPhysicalPixelCharacteristics;
ULONG ulPhysicalPixelGamma;
} GDIINFO, *PGDIINFO;
Membros
ulVersion
Especifica o número de versão do driver. A ordenação de bytes de ulVersion tem o seguinte formato.
Os 16 bits de ordem alta devem ser definidos como zero. Os bits 8 a 15 especificam o número de versão do sistema operacional da Microsoft para o qual o driver foi projetado. Os 4 bits de ordem superior desse intervalo especificam o número principal da versão, os 4 bits de ordem inferior contêm o número secundário da versão. Os 8 bits de ordem inferior de ulVersion especificam o número de versão do driver de exibição; esse valor deve ser incrementado para cada versão do arquivo binário do driver de exibição.
O programa De exibição no Painel de Controle indica o número de versão contido em ulVersion, juntamente com outras informações específicas do driver.
ulTechnology
Especifica a tecnologia do dispositivo. Esse membro pode ser um dos valores listados na tabela a seguir.
Valor | Significado |
---|---|
DT_CHARSTREAM | Somente fontes de dispositivo |
DT_PLOTTER | Plotador de vetor |
DT_RASCAMERA | Câmera de varredura |
DT_RASDISPLAY | Exibição de varredura |
DT_RASPRINTER | Impressora raster |
ulHorzSize
Especifica a largura da superfície física. Um valor positivo indica que a largura está em unidades de milímetros, enquanto um valor negativo indica que a largura está em unidades de micrometers.
ulVertSize
Especifica a altura da superfície física. Um valor positivo indica que a altura está em unidades de milímetros, enquanto um valor negativo indica que a altura está em unidades de micrometers.
ulHorzRes
Especifica a largura em pixels da superfície física (dispositivos de exibição) ou da superfície imprimível (impressoras).
Consulte também ulDesktopHorzRes.
ulVertRes
Especifica a altura em pixels da superfície física (dispositivos de exibição) ou da superfície imprimível (impressoras).
cBitsPixel
Especifica o número de bits adjacentes em cada plano de cores. O número total de bits por pixel é o produto de cBitsPixel e cPlanes.
cPlanes
Especifica o número de planos de cores.
ulNumColors
Para dispositivos palettizados, ulNumColors especifica o número de entradas na paleta de cores padrão. Para dispositivos não armazenados (que não incluem impressoras), ulNumColors é definido como -1.
flRaster
É reservado e deve ser deixado definido como zero.
ulLogPixelsX
Especifica a resolução de largura do dispositivo em pixels lógicos por polegada.
Para impressoras, esse membro deve ser definido como a resolução da impressora no dpi.
Para exibições, esse membro deve ser definido como 96.
ulLogPixelsY
Especifica a resolução de altura do dispositivo em pixels lógicos por polegada.
Para impressoras, esse membro deve ser definido como a resolução da impressora no dpi.
Para exibições, esse membro deve ser definido como 96.
flTextCaps
Especifica um sinalizador que descreve os recursos de texto do Windows 3.1. Se o driver TC_SCROLLBLT sinalizador estiver nesse membro, ele indicará que o console deve executar a rolagem de texto redesenhando toda a tela, usando a função DrvTextOut fornecida pelo driver em vez das funções DrvBitBlt ou DrvCopyBits . O driver deve definir esse sinalizador se as transferências de bloco de bits de tela para tela estiverem lentas. Se esse sinalizador não estiver definido, o driver solicitará implicitamente que o console execute rolagens de texto por meio de DrvBitBlt/DrvCopyBits.
ulDACRed
ulDACGreen
ulDACBlue
Especifica o número de exibição de bits da DAC para a cor especificada.
ulAspectX
Especifica a largura relativa de um pixel de dispositivo, no intervalo de um a 1000.
ulAspectY
Especifica a altura relativa de um pixel de dispositivo, no intervalo de um a 1000.
ulAspectXY
Especifica a raiz quadrada da soma dos quadrados de ulAspectX e ulAspectY.
xStyleStep
Especifica o numerador de avanço de estilo para linhas x principais, dx. Para obter informações adicionais, consulte a seção Comentários a seguir e Linhas Cosméticas Estilizadas.
yStyleStep
Especifica o numerador de avanço de estilo para linhas principais y, dy. Para obter informações adicionais, consulte a seção Comentários a seguir e Linhas Cosméticas Estilizadas.
denStyleStep
Especifica o denominador de style advance, D. Para obter informações adicionais, consulte a seção Comentários a seguir e Linhas Cosméticas Estilizadas.
ptlPhysOffset
Especifica uma estrutura POINTL que contém o tamanho, em pixels, da margem não aritmável de uma superfície.
szlPhysSize
Especifica uma estrutura SIZEL que contém o tamanho, em pixels, de toda a superfície, incluindo margens não aritmáveis. Uma estrutura SIZEL é idêntica a uma estrutura SIZE .
ulNumPalReg
Especifica o número de registros de paleta para um dispositivo indexado.
ciDevice
É uma estrutura COLORINFO que define as cores do dispositivo no espaço de coordenadas do CIE.
ulDevicePelsDPI
Para impressoras, especifica o número de pixels (ou pontos ou bocais) por polegada se os pixels forem dispostos lado a lado sem sobreposição ou espaço entre. Por exemplo, se o tamanho de um pixel for de 0,001 polegada, esse valor será igual a um dividido por 0,001. Se o membro for zero, o halftoning GDI calculará esse número com base na suposição de que todos os pixels estão conectados sem sobreposição.
Como o tamanho do ponto físico para a maioria das impressoras é maior do que o tamanho do ponto medido, a GDI usa esse valor para aproximar quantos nós físicos podem ser colocados, com base no tamanho da célula (tamanho do padrão). Em seguida, uma regressão de log é executada para determinar o que é mais linear; ou seja, onde os ponto devem ser colocados para a melhor cobertura para otimizar a cobertura de pixels de dispositivo sobrepostos (ganho de ponto).
Para exibições, esse membro deve ser definido como zero.
ulPrimaryOrder
Especifica a ordem de bits das cores primárias do dispositivo ou dos números do plano para a saída de meio tom. Esse membro pode ser um dos valores listados na tabela a seguir.
Sinalizador | Significado |
---|---|
PRIMARY_ORDER_ABC | A ordem de saída do dispositivo é RGB ou CMY. Vermelho ou ciano está nos bits menos significativos; azul ou amarelo está nos bits mais significativos. |
PRIMARY_ORDER_ACB | A ordem de saída do dispositivo é RBG ou CYM. Vermelho ou ciano está nos bits menos significativos; green ou magenta está nos bits mais significativos. |
PRIMARY_ORDER_BAC | A ordem de saída do dispositivo é GRB ou MCY. Verde ou magenta está nos bits menos significativos; azul ou amarelo está nos bits mais significativos. |
PRIMARY_ORDER_BCA | A ordem de saída do dispositivo é GBR ou MYC. Verde ou magenta está nos bits menos significativos; vermelho ou ciano está nos bits mais significativos. |
PRIMARY_ORDER_CBA | A ordem de saída do dispositivo é BGR ou YMC. Azul ou amarelo está nos bits menos significativos; vermelho ou ciano está nos bits mais significativos. |
PRIMARY_ORDER_CAB | A ordem de saída do dispositivo é BRG ou YCM. Azul ou amarelo está nos bits menos significativos; green ou magenta está nos bits mais significativos. |
ulHTPatternSize
Especifica o tamanho do padrão de meio tom. Os valores que terminam com AxBM são variações dos padrões AxB . Em outras palavras, SIZEAxB e SIZE_AxB_M diferem por quais pixels são iluminados em um padrão A x B. Esse membro pode ser um dos seguintes valores:
- HT_PATSIZE_2x2
- HT_PATSIZE_2x2_M
- HT_PATSIZE_4x4
- HT_PATSIZE_4x4_M
- HT_PATSIZE_6x6
- HT_PATSIZE_6x6_M
- HT_PATSIZE_8x8
- HT_PATSIZE_8x8_M
- HT_PATSIZE_10x10
- HT_PATSIZE_10x10_M
- HT_PATSIZE_12x12
- HT_PATSIZE_12x12_M
- HT_PATSIZE_14x14
- HT_PATSIZE_14x14_M
- HT_PATSIZE_16x16
- HT_PATSIZE_16x16_M
- HT_PATSIZE_SUPERCELL
- HT_PATSIZE_SUPERCELL_M
- HT_PATSIZE_USER
- HT_PATSIZE_MAX_INDEX
- HT_PATSIZE_DEFAULT
ulHTOutputFormat
Especifica o formato de saída preferencial para halftone. HT_FORMAT_4BPP usa apenas 8 cores de intensidade total, enquanto HT_FORMATP_IRGB usa todas as 16 cores, incluindo as cores de meia intensidade. Supõe-se que um formato 5 x 5 x 5 (5 bits por cor) seja usado para HT_FORMAT_16BPP. Esse membro pode ser um dos seguintes valores:
- HT_FORMAT_1BPP
- HT_FORMAT_4BPP
- HT_FORMAT_4BPP_IRGB
- HT_FORMAT_8BPP
- HT_FORMAT_16BPP
- HT_FORMAT_24BPP
- HT_FORMAT_32BPP
flHTFlags
Especifica uma combinação de sinalizadores que descrevem o dispositivo. Esses sinalizadores são necessários para o halftoning. Esse membro pode ser uma combinação dos seguintes valores:
Sinalizador | Significado |
---|---|
HT_FLAG_8BPP_CMY332_MASK | Sinalizador usado para limpar os oito bits superiores de flHTFlags (bits 24 a 31). A macro MAKE_CMY332_MASK pode ser usada para definir esses bits com informações de nível de tinta do modo CMY de 8 bits por pixel. Consulte Usando modos de máscara CMY cmy GDI de 8 bits por pixel para obter mais informações. |
HT_FLAG_ADDITIVE_PRIMS | As primárias de dispositivo são aditivas. |
HT_FLAG_DO_DEVCLR_XFORM | Solicita a GDI para executar a correção de cor genérica. |
HT_FLAG_HAS_BLACK_DYE | O dispositivo tem corante preto separado. |
|
O papel no dispositivo absorve mais do que a quantidade normal de tinta, portanto, o GDI deve renderizar menos tinta para papel. Esses sinalizadores indicam a quantidade relativa de absorção de tinta, com HT_FLAG_HIGHER_INK_ABSORPTION indicando mais absorção do que HT_FLAG_HIGH_INK_ABSORPTION, mas menos de HT_FLAG_HIGHEST_INK_ABSORPTION. |
|
Sinalizadores usados para definir HT_FLAG_HIGH/HIGHER/HIGHEST_INK_ABSORPTION e HT_FLAG_LOW/LOWER/LOWEST_INK_ABSORPTION. |
HT_FLAG_INK_HIGH_ABSORPTION | Sinalizador usado para definir HT_FLAG_HIGH/HIGHER/HIGHEST_INK_ABSORPTION. |
HT_FLAG_INVERT_8BPP_BITMASK_IDX | O meio-tom GDI deve renderizar o bitmap de superfície do modo de solicitação de 8 bits por pixel usando uma paleta de modo CMY_INVERTED. Consulte Usando modos de máscara CMY GDI de 8 bits por pixel para CMY_INVERTED descrição e requisitos da paleta de modo. |
|
O papel no dispositivo absorve uma quantidade menor do que o normal de tinta, portanto, o GDI deve renderizar mais tinta em papel. Esses sinalizadores indicam a quantidade relativa de absorção de tinta, com HT_FLAG_LOWER_INK_ABSORPTION indicando menos absorção do que HT_FLAG_LOW_INK_ABSORPTION, mas mais de HT_FLAG_LOWEST_INK_ABSORPTION. |
HT_FLAG_NORMAL_INK_ABSORPTION | O papel no dispositivo absorve a quantidade normal de tinta. |
HT_FLAG_OUTPUT_CMY | O dispositivo usa primárias CMY em vez de primárias RGB. Esse valor de sinalizador se aplica apenas a 1 bpp e 4 superfícies de destino bpp. |
HT_FLAG_PRINT_DRAFT_MODE | Desabilita o código de suavização da GDI. |
HT_FLAG_SQUARE_DEVICE_PEL | O pixel do dispositivo é quadrado em vez de redondo (exibe apenas -- as impressoras exigem pixels arredondados). |
HT_FLAG_USE_8BPP_BITMASK | O dispositivo usa impressão monocromática. |
ulVRefresh
A taxa de atualização de vídeo para o modo de exibição atual. Esse é o valor retornado pelo driver de miniporto para a taxa de atualização para o modo atual.
O programa Display no Painel de Controle exibe a taxa de atualização contida no membro ulVRefresh.
ulBltAlignment
Esse membro indica o alinhamento x preferido para transferências de bloco de bits para o dispositivo. Um valor zero indica que as transferências de bloco de bits são aceleradas; qualquer outro número não negativo indica que as transferências de bloco de bits não são aceleradas e fornece o alinhamento horizontal preferencial como um pixel múltiplo.
Esse valor é usado pelo sistema para determinar o alinhamento padrão para posições de janela e também é usado para definir o padrão inicial de arrastar completo durante a instalação. Um valor igual a zero indica que o arrastar completo deve estar ativado por padrão; qualquer valor diferente de zero indica que o arrastar completo deve estar desativado por padrão.
ulPanningHorzRes
ulPanningVertRes
Deve ser ignorado pelo driver e permanecer inicializado como zero.
xPanningAlignment
yPanningAlignment
Deve ser ignorado pelo driver e permanecer inicializado como zero.
cxHTPat
cyHTPat
Especifique a largura e a altura, respectivamente, em pixels, do padrão de dither de meio-tom fornecido pelo usuário. O valor de cxHTPat deve estar no intervalo HT_USERPAT_CX_MIN para HT_USERPAT_CX_MAX, inclusive. O valor de cyHTPat deve estar no intervalo HT_USERPAT_CY_MIN para HT_USERPAT_CY_MAX, inclusive. Essas constantes são definidas em winddi.h. Consulte a seção Comentários a seguir para obter mais informações.
pHTPatA
pHTPatB
pHTPatC
Aponte para os padrões de halftone dither definidos pelo usuário para as cores primárias A, B e C, respectivamente, conforme definido pelo valor PRIMARY_ORDER_XXX no membro ulPrimaryOrder . Cada padrão dither deve ser uma matriz de bytes bidimensional válida de tamanho cxHTPat por cyHTPat. Consulte a seção Comentários a seguir para obter mais informações.
flShadeBlend
Especifica um conjunto de sinalizadores que indicam os recursos de sombreamento e mesclagem do dispositivo. Os drivers de exibição devem ignorar esse membro e deixá-lo definido como zero. Para drivers de impressora, o valor que o driver coloca nesse membro é o valor que o GDI relata quando um aplicativo chama GetDeviceCaps(hdc, SHADEBLENDCAPS). A função GetDeviceCaps é descrita na documentação do SDK do Microsoft Window.
ulPhysicalPixelCharacteristics
Especifica a maneira como os fragmentos de cor são configurados para formar pixels no dispositivo de exibição. Os fragmentos de cor no dispositivo de exibição podem ser organizados em ordem RGB ou, em ordem BGR, completamente independentes da ordenação RGB no buffer de quadros. Os fragmentos de cor podem ser configurados em faixas horizontais nas quais todos os fragmentos em uma linha são da mesma cor. Como alternativa, os fragmentos de cor podem ser configurados em listras verticais, nas quais todos os fragmentos em uma coluna são da mesma cor. A distribuição vertical é preferencial, pois fornece efetivamente três fragmentos separados em uma linha para cada pixel, proporcionando assim maior resolução horizontal de subpixels.
O membro ulPhysicalPixelCharacteristics deve ser definido como um dos valores mostrados na tabela a seguir:
Valor | Significado |
---|---|
PPC_DEFAULT | As informações de pixel físico do dispositivo de exibição são desconhecidas. |
PPC_BGR_ORDER_HORIZONTAL_STRIPES | Fragmentos de cor física no dispositivo de exibição são organizados, de cima para baixo, em linhas de fragmentos de cor azul, verde e vermelho. |
PPC_BGR_ORDER_VERTICAL_STRIPES | Fragmentos de cor física no dispositivo de exibição são organizados, da esquerda para a direita, em colunas de fragmentos de cor azul, verde e vermelho. |
PPC_RGB_ORDER_HORIZONTAL_STRIPES | Fragmentos de cor física no dispositivo de exibição são organizados, de cima para baixo, em linhas de fragmentos de cor vermelho, verde e azul. |
PPC_RGB_ORDER_VERTICAL_STRIPES | Fragmentos de cor física no dispositivo de exibição são organizados, da esquerda para a direita, em colunas de fragmentos de cor vermelho, verde e azul. |
PPC_UNDEFINED |
As informações de pixel físico do dispositivo de exibição são conhecidas, mas não podem ser expressas como uma das enumerações fornecidas. No momento, as enumerações são aplicáveis a um monitor baseado em LCD. O driver deve definir ulPhysicalPixelCharacteristics como PPC_UNDEFINED quando qualquer uma das condições a seguir for atendida. (Essa lista não é abrangente, mas abrange as condições mais comuns.)
|
ulPhysicalPixelGamma
Especifica o gama do dispositivo de exibição. Esse membro deve ser definido como o gama do pixel físico, dimensionado por um fator de 1000 ou para um dos valores a seguir. Por exemplo, um valor gama de 2,2 seria representado como 2200.
Valor | Significado |
---|---|
PPG_DEFAULT | O driver não tem conhecimento do gama para o dispositivo. |
PPG_SRGB | O dispositivo usa um gama sRGB. |
Comentários
O GDI inicializa essa estrutura zero antes de chamar a função DrvEnablePDEV fornecida pelo driver.
Os membros xStyleStep, yStyleStep e denStyleStep definem como um estilo de linha cosmética deve avançar à medida que desenha cada pixel de uma linha cosmética. A quantidade avançada ao longo do estilo de cada pixel é definida como uma fração que depende se a linha tem estilo x ou estilo y. Se a linha for estilo x, o estilo avançará pela quantidade fracionária dx/D para cada pixel movido na direção x. Caso contrário, o estilo avança por dy/D para cada pixel movido na direção y.
Os ponto no estilo de linha predefinido PS_DOT têm cada uma unidade de comprimento. Se o driver definir xStyleStep como um e denStyleStep como 5, uma linha horizontal pontilhada consistirá em 5 pixels on seguido de 5 pixels-off, repetido.
Cada um desses três números deve ser menor que 65536, embora os membros caps sejam valores LONG. Essas etapas de estilo são definidas pelo driver para garantir que os nós e traços em uma linha sejam um tamanho agradável no dispositivo de saída. As etapas horizontais e verticais podem ser diferentes para corrigir as proporções de proporções nãotriviais. Por exemplo, em uma tela EGA, cujos pixels são 33% maiores do que largos, você pode definir:
pdevcaps->xStyleStep = 3; // For an EGA
pdevcaps->yStyleStep = 4;
pdevcaps->denStyleStep = 12;
Nesse caso, as linhas pontilhadas horizontais são de 4 pixels on, 4 pixels off, pois o estilo avança 3/12 ou 1/4 para cada pixel. As linhas pontilhadas verticais são de 3 pixels on/3 pixels-off.
As linhas estilizadas ficarão melhores se as etapas de estilo x e y forem divididas uniformemente no denominador de estilo, como no exemplo anterior. Isso fornece traços e ponto que têm sempre o mesmo comprimento.
A GDI precisa dessas informações para que suas funções de bitmap possam emular exatamente o que o dispositivo faz em sua própria superfície. Os aplicativos podem acessar essas informações para determinar exatamente quais pixels serão ativados para linhas estilizadas. Consulte também linhas cosméticas estilizadas.
Os membros relacionados ao halftone, cxHTPat, cyHTPat, pHTPatA, pHTPatB e pHTPatC, podem ser usados em um plug-in de renderização Unidrv do OEM para definir um padrão de meio-tom personalizado que consiste em uma ou três cores. Esses membros só serão verificados se o membro ulHTPatternSize estiver definido como HT_PATSIZE_USER. Nesse caso, um OEM pode usar esses membros para definir um padrão de meio-tom personalizado, com base em dados armazenados em um arquivo de recurso ou gerados por um módulo de personalização OEM. Os membros cxHTPat e cyHTPat definem o tamanho de cada uma das três matrizes de padrão de meio tom bidimensional. Os membros pHTPatA, pHTPatB e pHTPatC apontam para as respectivas matrizes de padrão para cada cor. Se apenas uma matriz de padrões for usada, pHTPatA, pHTPatB e pHTPatC apontarão para ela.
Cada limite de bytes em um local específico em um padrão de dither halftone determina se o pixel no local do plano de saída correspondente estará ativado ou desativado. Um valor de limite zero em um local específico na matriz de padrões indica que o local de pixel correspondente é ignorado (é preto). Os valores de limite de 1 a 255 fornecem o padrão dither com 255 níveis de cinza; se o valor de pixel no plano de saída for maior ou igual ao valor limite desse local, o pixel será ativado. Um valor de pixel menor que seu valor de limite correspondente faz com que seu pixel seja desativado no plano de saída. Consulte Halftoning personalizado em Personalizando drivers de impressora da Microsoft para obter mais informações.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | winddi.h (inclua Winddi.h) |