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.

Figura mostrando o membro ulVersion especificando o número de versão do driver

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.
HT_FLAG_HIGH_INK_ABSORPTION
HT_FLAG_HIGHER_INK_ABSORPTION
HT_FLAG_HIGHEST_INK_ABSORPTION
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.
HT_FLAG_INK_ABSORPTION_IDX0
HT_FLAG_INK_ABSORPTION_IDX1
HT_FLAG_INK_ABSORPTION_IDX2
HT_FLAG_INK_ABSORPTION_IDX3
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.
HT_FLAG_LOW_INK_ABSORPTION
HT_FLAG_LOWER_INK_ABSORPTION
HT_FLAG_LOWEST_INK_ABSORPTION
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.)
  • O driver tem conhecimento de que o monitor não é um dispositivo LCD.
  • O dispositivo é um dispositivo LCD, mas a resolução do buffer de quadros é diferente da resolução nativa da exibição física que exige dimensionamento. Ou seja, o dimensionamento é necessário porque não há mais uma correspondência um-para-um entre pixels de buffer de quadro e pixels de dispositivo.

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)

Confira também

CIECHROMA

COLORINFO

DrvBitBlt

DrvCopyBits

DrvEnablePDEV

DrvTextOut