Structure GDIINFO (winddi.h)
La structure GDIINFO décrit les fonctionnalités graphiques d’un appareil donné.
Syntaxe
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;
Membres
ulVersion
Spécifie le numéro de version du pilote. L’ordre des octets de ulVersion se présente sous la forme suivante.
Les 16 bits d’ordre élevé doivent être définis sur zéro. Les bits 8 à 15 spécifient le numéro de version du système d’exploitation Microsoft pour lequel le pilote est conçu. Les 4 bits d’ordre élevé de cette plage spécifient le numéro principal de la version. Les 4 bits d’ordre inférieur contiennent le nombre mineur de la version. Les 8 bits d’ulVersion de faible ordre spécifient le numéro de version du pilote d’affichage ; cette valeur doit être incrémentée pour chaque version du fichier binaire du pilote d’affichage.
Le programme d’affichage dans Panneau de configuration indique le numéro de version contenu dans ulVersion, ainsi que d’autres informations spécifiques au pilote.
ulTechnology
Spécifie la technologie de l’appareil. Ce membre peut être l’une des valeurs répertoriées dans le tableau suivant.
Valeur | Signification |
---|---|
DT_CHARSTREAM | Polices d’appareil uniquement |
DT_PLOTTER | Traceur vectoriel |
DT_RASCAMERA | Caméra raster |
DT_RASDISPLAY | Affichage raster |
DT_RASPRINTER | Imprimante raster |
ulHorzSize
Spécifie la largeur de la surface physique. Une valeur positive indique que la largeur est en unités de millimètres, tandis qu’une valeur négative indique que la largeur est en unités de micromètres.
ulVertSize
Spécifie la hauteur de la surface physique. Une valeur positive indique que la hauteur est en unités de millimètres, tandis qu’une valeur négative indique que la hauteur est en unités de micromètres.
ulHorzRes
Spécifie la largeur en pixels de la surface physique (périphériques d’affichage) ou de la surface imprimable (imprimantes).
Voir aussi ulDesktopHorzRes.
ulVertRes
Spécifie la hauteur en pixels de la surface physique (périphériques d’affichage) ou de la surface imprimable (imprimantes).
cBitsPixel
Spécifie le nombre de bits adjacents dans chaque plan de couleurs. Le nombre total de bits par pixel est le produit de cBitsPixel et cPlanes.
cPlanes
Spécifie le nombre de plans de couleurs.
ulNumColors
Pour les appareils palettisés, ulNumColors spécifie le nombre d’entrées dans la palette de couleurs par défaut. Pour les appareils nonpalettisés (qui n’incluent pas d’imprimantes), ulNumColors est défini sur -1.
flRaster
Est réservé et doit être laissé défini sur zéro.
ulLogPixelsX
Spécifie la résolution de largeur de l’appareil en pixels logiques par pouce.
Pour les imprimantes, ce membre doit être défini sur la résolution de l’imprimante en ppp.
Pour les affichages, ce membre doit être défini sur 96.
ulLogPixelsY
Spécifie la résolution de hauteur de l’appareil en pixels logiques par pouce.
Pour les imprimantes, ce membre doit être défini sur la résolution de l’imprimante en ppp.
Pour les affichages, ce membre doit être défini sur 96.
flTextCaps
Spécifie un indicateur décrivant les fonctionnalités de texte de Windows 3.1. Si le pilote TC_SCROLLBLT indicateur se trouve dans ce membre, cela indique que la console doit effectuer le défilement du texte en redessinant l’écran entier, à l’aide de la fonction DrvTextOut fournie par le pilote plutôt que des fonctions DrvBitBlt ou DrvCopyBits . Le pilote doit définir cet indicateur si les transferts de bloc de bits d’écran à écran sont lents. Si cet indicateur n’est pas défini, le pilote demande implicitement que la console effectue des défilements de texte dans DrvBitBlt/DrvCopyBits.
ulDACRed
ulDACGreen
ulDACBlue
Spécifie le nombre d’affichage de bits DAC pour la couleur spécifiée.
ulAspectX
Spécifie la largeur relative d’un pixel d’appareil, comprise entre un et 1000.
ulAspectY
Spécifie la hauteur relative d’un pixel d’appareil, comprise entre un et 1000.
ulAspectXY
Spécifie la racine carrée de la somme des carrés de ulAspectX et ulAspectY.
xStyleStep
Spécifie le numérateur de l’avance de style pour les lignes X-major, dx. Pour plus d’informations, reportez-vous à la section Remarques et aux lignes cosmétiques styled suivantes.
yStyleStep
Spécifie le numérateur de l’avance de style pour les lignes Y-major, dy. Pour plus d’informations, reportez-vous à la section Remarques et aux lignes cosmétiques styled suivantes.
denStyleStep
Spécifie le dénominateur de l’avance de style, D. Pour plus d’informations, reportez-vous à la section Remarques et aux lignes cosmétiques styled suivantes.
ptlPhysOffset
Spécifie une structure POINTL qui contient la taille, en pixels, de la marge non modifiable d’une surface.
szlPhysSize
Spécifie une structure SIZEL qui contient la taille, en pixels, de l’ensemble de la surface, y compris les marges non modifiables. Une structure SIZEL est identique à une structure SIZE .
ulNumPalReg
Spécifie le nombre de registres de palette pour un appareil indexé.
ciDevice
Structure COLORINFO qui définit les couleurs de l’appareil dans l’espace de coordonnées CIE.
ulDevicePelsDPI
Pour les imprimantes, spécifie le nombre de pixels (ou points, ou buses) par pouce si les pixels sont disposés côte à côte sans chevauchement ni espace entre les deux. Par exemple, si la taille d’un pixel est de 0,001 pouce, cette valeur est égale à une division par 0,001. Si le membre est égal à zéro, gDI demi-toning calcule ce nombre en partant de l’hypothèse que tous les pixels sont connectés sans chevauchement.
Étant donné que la taille des points physiques de la plupart des imprimantes est supérieure à la taille de point mesurée, GDI utilise cette valeur pour estimer le nombre de points physiques pouvant être placés, en fonction de la taille de cellule (taille du modèle). Une régression de journal est ensuite effectuée pour déterminer ce qui est le plus linéaire ; autrement dit, où les points doivent être placés pour une couverture optimale afin d’optimiser la couverture des pixels de l’appareil qui se chevauche (gain de points).
Pour les affichages, ce membre doit être défini sur zéro.
ulPrimaryOrder
Spécifie l’ordre de bits des couleurs primaires ou des numéros de plan de l’appareil pour la sortie demi-ton. Ce membre peut être l’une des valeurs répertoriées dans le tableau suivant.
Indicateur | Signification |
---|---|
PRIMARY_ORDER_ABC | L’ordre de sortie de l’appareil est RVB ou CMY. Le rouge ou le cyan est dans les bits les moins significatifs ; bleu ou jaune est dans les bits les plus significatifs. |
PRIMARY_ORDER_ACB | L’ordre de sortie de l’appareil est RBG ou CYM. Le rouge ou le cyan est dans les bits les moins significatifs ; vert ou magenta est dans les bits les plus significatifs. |
PRIMARY_ORDER_BAC | L’ordre de sortie de l’appareil est GRB ou MCY. Le vert ou le magenta est dans les bits les moins significatifs ; bleu ou jaune est dans les bits les plus significatifs. |
PRIMARY_ORDER_BCA | L’ordre de sortie de l’appareil est GBR ou MYC. Le vert ou le magenta est dans les bits les moins significatifs ; rouge ou cyan est dans les bits les plus significatifs. |
PRIMARY_ORDER_CBA | L’ordre de sortie de l’appareil est BGR ou YMC. Le bleu ou le jaune est dans les bits les moins significatifs ; rouge ou cyan est dans les bits les plus significatifs. |
PRIMARY_ORDER_CAB | L’ordre de sortie de l’appareil est BRG ou YCM. Le bleu ou le jaune est dans les bits les moins significatifs ; vert ou magenta est dans les bits les plus significatifs. |
ulHTPatternSize
Spécifie la taille du modèle en demi-teinte. Les valeurs se terminant par AxBM sont des variantes des modèles AxB . En d’autres termes, SIZEAxB et SIZE_AxB_M diffèrent par les pixels qui sont éclairés dans un modèle A x B. Ce membre peut être l’une des valeurs suivantes :
- 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
Spécifie le format de sortie préféré pour le demi-ton. HT_FORMAT_4BPP n’utilise que 8 couleurs de pleine intensité tandis que HT_FORMATP_IRGB utilise les 16 couleurs, y compris les couleurs de demi-intensité. On suppose qu’un format 5 x 5 x 5 (5 bits par couleur) est utilisé pour HT_FORMAT_16BPP. Ce membre peut être l’une des valeurs suivantes :
- HT_FORMAT_1BPP
- HT_FORMAT_4BPP
- HT_FORMAT_4BPP_IRGB
- HT_FORMAT_8BPP
- HT_FORMAT_16BPP
- HT_FORMAT_24BPP
- HT_FORMAT_32BPP
flHTFlags
Spécifie une combinaison d’indicateurs décrivant l’appareil. Ces indicateurs sont nécessaires pour la demi-toning. Ce membre peut être une combinaison des valeurs suivantes :
Indicateur | Signification |
---|---|
HT_FLAG_8BPP_CMY332_MASK | Indicateur utilisé pour effacer les huit bits supérieurs de flHTFlags (bits 24 à 31). La macro MAKE_CMY332_MASK peut ensuite être utilisée pour définir ces bits avec des informations de niveau d’encre en mode CMY 8 bits par pixel. Pour plus d’informations, consultez Utilisation des modes de masque CMY 8 bits par pixel GDI . |
HT_FLAG_ADDITIVE_PRIMS | Les primaires d’appareil sont additives. |
HT_FLAG_DO_DEVCLR_XFORM | Demande à GDI d’effectuer une correction de couleur générique. |
HT_FLAG_HAS_BLACK_DYE | L’appareil a un colorant noir distinct. |
|
Le papier dans l’appareil absorbe plus que la quantité normale d’encre. GDI doit donc rendre moins d’encre sur papier. Ces indicateurs indiquent la quantité relative d’absorption d’encre, HT_FLAG_HIGHER_INK_ABSORPTION indiquant une absorption supérieure à HT_FLAG_HIGH_INK_ABSORPTION, mais inférieure à HT_FLAG_HIGHEST_INK_ABSORPTION. |
|
Indicateurs utilisés pour définir HT_FLAG_HIGH/HIGHER/HIGHEST_INK_ABSORPTION et HT_FLAG_LOW/LOWER/LOWEST_INK_ABSORPTION. |
HT_FLAG_INK_HIGH_ABSORPTION | Indicateur utilisé pour définir HT_FLAG_HIGH/HIGHER/HIGHEST_INK_ABSORPTION. |
HT_FLAG_INVERT_8BPP_BITMASK_IDX | Le demi-ton GDI doit afficher une image bitmap de surface en mode ask 8 bits par pixel à l’aide d’une palette de mode CMY_INVERTED. Consultez Utilisation des modes de masque CMY 8 bits par pixel de GDI pour connaître la description et les exigences de la palette du mode CMY_INVERTED. |
|
Le papier dans l’appareil absorbe moins d’encre que la normale, donc GDI doit restituer plus d’encre sur papier. Ces indicateurs indiquent la quantité relative d’absorption d’encre, HT_FLAG_LOWER_INK_ABSORPTION indiquant moins d’absorption que HT_FLAG_LOW_INK_ABSORPTION, mais plus que HT_FLAG_LOWEST_INK_ABSORPTION. |
HT_FLAG_NORMAL_INK_ABSORPTION | Le papier dans l’appareil absorbe la quantité normale d’encre. |
HT_FLAG_OUTPUT_CMY | L’appareil utilise des primaires CMY plutôt que des primaires RVB. Cette valeur d’indicateur s’applique uniquement aux surfaces de destination 1 bpp et 4 bpp. |
HT_FLAG_PRINT_DRAFT_MODE | Désactive le code anti-attirail de GDI. |
HT_FLAG_SQUARE_DEVICE_PEL | Le pixel de l’appareil est carré plutôt que rond (affiche uniquement - les imprimantes nécessitent des pixels arrondis). |
HT_FLAG_USE_8BPP_BITMASK | L’appareil utilise l’impression monochrome. |
ulVRefresh
Taux d’actualisation vidéo pour le mode d’affichage actuel. Il s’agit de la valeur retournée par le pilote miniport pour le taux d’actualisation pour le mode actuel.
Le programme d’affichage dans Panneau de configuration affiche la fréquence d’actualisation contenue dans le membre ulVRefresh.
ulBltAlignment
Ce membre indique l’alignement x préféré pour les transferts de blocs de bits vers l’appareil. La valeur zéro indique que les transferts de blocs de bits sont accélérés ; tout autre nombre non négatif indique que les transferts de blocs de bits ne sont pas accélérés et donne l’alignement horizontal préféré sous forme de multiple de pixels.
Cette valeur est utilisée par le système pour déterminer l’alignement par défaut pour les positions de fenêtre et est également utilisée pour définir la valeur par défaut de glissement intégral initiale lors de l’installation. La valeur zéro indique que le glissement complet doit être activé par défaut ; toute valeur autre que zéro indique que le glissement complet doit être désactivé par défaut.
ulPanningHorzRes
ulPanningVertRes
Doit être ignoré par le pilote et rester initialisé à zéro.
xPanningAlignment
yPanningAlignment
Doit être ignoré par le pilote et rester initialisé à zéro.
cxHTPat
cyHTPat
Spécifiez respectivement la largeur et la hauteur, en pixels, du modèle de trame en demi-teinte fourni par l’utilisateur. La valeur de cxHTPat doit se trouver dans la plage HT_USERPAT_CX_MIN à HT_USERPAT_CX_MAX, inclusivement. La valeur de cyHTPat doit se trouver dans la plage HT_USERPAT_CY_MIN pour HT_USERPAT_CY_MAX, inclusivement. Ces constantes sont définies dans winddi.h. Pour plus d’informations, consultez la section Remarques suivante.
pHTPatA
pHTPatB
pHTPatC
Pointez sur les modèles de trame en demi-teinte définis par l’utilisateur pour les couleurs primaires A, B et C, respectivement, comme défini par la valeur PRIMARY_ORDER_XXX dans le membre ulPrimaryOrder . Chaque modèle de trame doit être un tableau d’octets à deux dimensions valide de taille cxHTPat par cyHTPat. Pour plus d’informations, consultez la section Remarques suivante.
flShadeBlend
Spécifie un ensemble d’indicateurs qui indiquent les fonctionnalités d’ombrage et de fusion de l’appareil. Les pilotes d’affichage doivent ignorer ce membre et le laisser défini sur zéro. Pour les pilotes d’imprimante, la valeur que le pilote place dans ce membre est la valeur que GDI signale lorsqu’une application appelle GetDeviceCaps(hdc, SHADEBLENDCAPS). La fonction GetDeviceCaps est décrite dans la documentation du Kit de développement logiciel (SDK) Microsoft Window.
ulPhysicalPixelCharacteristics
Spécifie la façon dont les fragments de couleur sont configurés pour former des pixels sur l’appareil d’affichage. Les fragments de couleur sur l’appareil d’affichage peuvent être disposés dans l’ordre RVB, ou dans l’ordre BGR, complètement indépendamment de l’ordre RVB dans la mémoire tampon d’image. Les fragments de couleur peuvent être configurés en bandes horizontales dans lesquelles tous les fragments d’une ligne sont de la même couleur. Vous pouvez également configurer les fragments de couleur en bandes verticales, dans lesquelles tous les fragments d’une colonne sont de la même couleur. Le striping vertical est préférable, car il fournit en fait trois fragments distincts dans une ligne pour chaque pixel, donnant ainsi une plus grande résolution horizontale de sous-pixels.
Le membre ulPhysicalPixelCharacteristics doit être défini sur l’une des valeurs indiquées dans le tableau suivant :
Valeur | Signification |
---|---|
PPC_DEFAULT | Les informations sur les pixels physiques de l’appareil d’affichage sont inconnues. |
PPC_BGR_ORDER_HORIZONTAL_STRIPES | Les fragments de couleurs physiques sur l’appareil d’affichage sont organisés, de haut en bas, en lignes de fragments de couleur bleu, vert et rouge. |
PPC_BGR_ORDER_VERTICAL_STRIPES | Les fragments de couleurs physiques sur l’appareil d’affichage sont organisés, de gauche à droite, en colonnes de fragments de couleur bleu, vert et rouge. |
PPC_RGB_ORDER_HORIZONTAL_STRIPES | Les fragments de couleurs physiques sur l’appareil d’affichage sont disposés, de haut en bas, en lignes de fragments de couleur rouge, vert et bleu. |
PPC_RGB_ORDER_VERTICAL_STRIPES | Les fragments de couleurs physiques sur l’appareil d’affichage sont organisés, de gauche à droite, en colonnes de fragments de couleur rouge, vert et bleu. |
PPC_UNDEFINED |
Les informations sur les pixels physiques de l’appareil d’affichage sont connues, mais ne peuvent pas être exprimées sous la forme d’une des énumérations données. Les énumérations s’appliquent actuellement à un moniteur LCD. Le pilote doit définir ulPhysicalPixelCharacteristics sur PPC_UNDEFINED lorsque l’une des conditions suivantes est remplie. (Cette liste n’est pas exhaustive, mais couvre les conditions les plus courantes.)
|
ulPhysicalPixelGamma
Spécifie le gamma du périphérique d’affichage. Ce membre doit être défini sur le gamma du pixel physique, mis à l’échelle d’un facteur de 1 000, ou sur l’une des valeurs suivantes. Par exemple, une valeur gamma de 2,2 serait représentée par 2200.
Valeur | Signification |
---|---|
PPG_DEFAULT | Le pilote n’a aucune connaissance du gamma de l’appareil. |
PPG_SRGB | L’appareil utilise un gamma sRGB. |
Remarques
GDI initialise zéro cette structure avant d’appeler la fonction DrvEnablePDEV fournie par le pilote.
Les membres xStyleStep, yStyleStep et denStyleStep définissent la façon dont un style de ligne cosmétique doit progresser à mesure qu’il dessine chaque pixel d’une ligne cosmétique. La quantité avancée le long du style pour chaque pixel est définie comme une fraction qui varie selon que la ligne est de style X ou Y. Si la ligne est de style x, le style avance de la quantité fractionnaire dx/D pour chaque pixel déplacé dans la direction x. Sinon, le style avance de dy/D pour chaque pixel déplacé dans la direction y.
Les points dans le style de ligne prédéfini PS_DOT ont chacun une unité de long. Si le pilote définit xStyleStep comme un et denStyleStep comme 5, une ligne horizontale en pointillés se compose de 5 pixels sur suivis de 5 pixels-off, répétés.
Chacun de ces trois nombres doit être inférieur à 65536, même si les membres majuscules sont des valeurs LONG. Ces étapes de style sont définies par le pilote pour garantir que les points et tirets d’une ligne sont d’une taille agréable sur le périphérique de sortie. Les étapes horizontales et verticales peuvent être différentes pour corriger les proportions non dérivées. Par exemple, sur un écran EGA, dont les pixels sont 33 % plus hauts que larges, vous pouvez définir :
pdevcaps->xStyleStep = 3; // For an EGA
pdevcaps->yStyleStep = 4;
pdevcaps->denStyleStep = 12;
Dans ce cas, les lignes en pointillés horizontales sont de 4 pixels sur, 4 pixels désactivés, car le style avance de 3/12 ou 1/4 pour chaque pixel. Les lignes verticales en pointillés sont de 3 pixels on/3 pixels-off.
Les lignes avec style sont meilleures si les étapes de style x et y se divisent uniformément dans le dénominateur de style, comme dans l’exemple précédent. Cela donne des tirets et des points qui sont toujours de la même longueur.
GDI a besoin de ces informations afin que ses fonctions bitmap puissent émuler exactement ce que fait l’appareil sur sa propre surface. Les applications peuvent accéder à ces informations pour déterminer exactement quels pixels seront activés pour les lignes avec style. Reportez-vous également à Lignes cosmétiques avec style.
Les membres liés aux demi-tons, cxHTPat, cyHTPat, pHTPatA, pHTPatB et pHTPatC, peuvent être utilisés dans un plug-in de rendu UNIDRV OEM pour définir un modèle de demi-teintes personnalisé comprenant une ou trois couleurs. Ces membres sont vérifiés uniquement si le membre ulHTPatternSize est défini sur HT_PATSIZE_USER. Dans ce cas, un OEM peut utiliser ces membres pour définir un modèle de demi-teinte personnalisé, basé sur les données stockées dans un fichier de ressources ou générées par un module de personnalisation OEM. Les membres cxHTPat et cyHTPat définissent la taille de chacun des trois tableaux de modèles de demi-teintes à deux dimensions. Les membres pHTPatA, pHTPatB et pHTPatC pointent vers les tableaux de modèles respectifs pour chaque couleur. Si un seul tableau de modèles est utilisé, pHTPatA, pHTPatB et pHTPatC pointent vers celui-ci.
Chaque seuil d’octets à un emplacement particulier dans un modèle de trame de demi-teintes détermine si le pixel à l’emplacement du plan de sortie correspondant sera activé ou désactivé. Une valeur de seuil zéro à un emplacement particulier dans le tableau de modèles indique que l’emplacement de pixel correspondant est ignoré (noir). Les valeurs de seuil comprises entre 1 et 255 fournissent le modèle de trame avec 255 niveaux de gris ; si la valeur du pixel dans le plan de sortie est supérieure ou égale à la valeur de seuil pour cet emplacement, le pixel est activé. Une valeur de pixel inférieure à sa valeur de seuil correspondante entraîne la désactivation de son pixel dans le plan de sortie. Pour plus d’informations, consultez Halftoning personnalisé dans La personnalisation des pilotes d’imprimante de Microsoft .
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | winddi.h (inclure Winddi.h) |