GDIINFO 結構 (winddi.h)
GDIINFO 結構描述指定裝置的圖形功能。
語法
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;
成員
ulVersion
指定驅動程式版本號碼。 ulVersion 的位元組順序格式如下。
高階 16 位必須設定為零。 位 8 到 15 指定驅動程式所設計 Microsoft 作業系統的版本號碼。 此範圍的高階 4 位會指定版本的主要數目,低序 4 位包含版本的次要數目。 ulVersion 的低序 8 位指定顯示驅動程式的版本號碼;每個版本的顯示驅動程式二進位檔都應該遞增此值。
控制台 中的顯示程式會指出 ulVersion 中包含的版本號碼,以及其他驅動程式特定的資訊。
ulTechnology
指定裝置技術。 此成員可以是下表所列的其中一個值。
值 | 意義 |
---|---|
DT_CHARSTREAM | 僅限裝置字型 |
DT_PLOTTER | 向量繪圖器 |
DT_RASCAMERA | 點陣相機 |
DT_RASDISPLAY | 點陣顯示 |
DT_RASPRINTER | 點陣印表機 |
ulHorzSize
指定實體表面的寬度。 正值表示寬度以公厘為單位,而負值表示寬度是以公分為單位。
ulVertSize
指定實體表面的高度。 正值表示高度以公厘為單位,而負值表示高度以公分為單位。
ulHorzRes
以像素為單位指定實體表面 (顯示裝置) 的寬度,或 (印表機) 的可列印表面。
另請參閱 ulDesktopHorzRes。
ulVertRes
指定實體表面 (顯示裝置) 的高度,或 (印表機) 的可列印表面高度。
cBitsPixel
指定每個色彩平面中的相鄰位數目。 每個像素的位總數是 cBitsPixel 和 cPlanes 的乘積。
cPlanes
指定色彩平面的數目。
ulNumColors
針對 Palettized 裝置, ulNumColors 會指定預設調色盤中的項目數。 對於未包含印表機) 的非固定裝置 (,ulNumColors 會設定為 -1。
flRaster
保留且必須保留為零。
ulLogPixelsX
以每英吋邏輯圖元指定裝置的寬度解析度。
對於印表機,此成員應設定為 dpi 的印表機解析度。
針對顯示,此成員必須設定為96。
ulLogPixelsY
以每英吋邏輯圖元指定裝置的高度解析度。
對於印表機,此成員應設定為 dpi 的印表機解析度。
針對顯示,此成員必須設定為96。
flTextCaps
指定描述 Windows 3.1 文字功能的旗標。 如果驅動程式TC_SCROLLBLT旗標在此成員中,它表示主控台應該使用驅動程式提供的 DrvTextOut 函式,而不是 DrvBitBlt 或 DrvCopyBits 函式,執行文字捲動。 如果螢幕對螢幕位區塊傳送速率緩慢,驅動程式應該設定此旗標。 如果未設定此旗標,驅動程式會隱含要求主控台執行文字捲動 DrvBitBlt/DrvCopyBits。
ulDACRed
ulDACGreen
ulDACBlue
指定指定色彩之 DAC 位的顯示編號。
ulAspectX
指定裝置圖元的相對寬度,範圍介於一到 1000 的範圍內。
ulAspectY
指定裝置圖元的相對高度,範圍介於一到 1000 的範圍內。
ulAspectXY
指定 ulAspectX 和 ulAspectY 平方總和的平方根。
xStyleStep
指定 x 主線 dx 樣式進階的微調子。 如需詳細資訊,請參閱下列一節和「樣式裝飾線」。
yStyleStep
指定 Y 主要線條 動態的樣式進階微調子。 如需詳細資訊,請參閱下列一節和「樣式裝飾線」。
denStyleStep
指定樣式進階的分母 D。如需詳細資訊,請參閱下列一節和「樣式裝飾線」。
ptlPhysOffset
指定 POINTL 結構,其中包含表面不可寫入邊界的大小,以像素為單位。
szlPhysSize
指定 SIZEL 結構,其中包含整個表面的大小,以像素為單位,包括不可寫入的邊界。 SIZEL 結構與 SIZE 結構相同。
ulNumPalReg
指定索引裝置的調色盤緩存器數目。
ciDevice
這是 一種 COLORINFO 結構,定義 CIE 座標空間中的裝置色彩。
ulDevicePelsDPI
針對印表機,指定圖元 (或點數,如果圖元是並排配置圖元而不重疊或間隔,則指定每英吋的) 數。 例如,如果圖元的大小是0.001英吋,這個值會等於0.001除以0.001。 如果成員為零,GDI 半角會根據假設所有像素都連接且沒有重疊的假設來計算此數位。
由於大部分印表機的實體點大小大於測量的點大小,所以 GDI 會根據儲存格大小 (圖樣大小) ,使用此值來近似可放置的實體點數目。 接著會執行記錄回歸來判斷最線性的內容;也就是說,應該放置點以獲得最佳涵蓋範圍,以優化重疊裝置圖元涵蓋範圍, (點取得) 。
針對顯示,此成員應設定為零。
ulPrimaryOrder
針對半色調輸出指定裝置主要色彩或平面編號的位順序。 此成員可以是下表所列的其中一個值。
旗標 | 意義 |
---|---|
PRIMARY_ORDER_ABC | 裝置輸出順序為 RGB 或 CMY。 紅色或青色位於最小有效位中;藍色或黃色位於最重要的位。 |
PRIMARY_ORDER_ACB | 裝置輸出順序為 RBG 或 CYM。 紅色或青色位於最小有效位中;綠色或magenta位於最重要的位。 |
PRIMARY_ORDER_BAC | 裝置輸出順序為 GRB 或 MCY。 綠色或 magenta 在最小顯著位中;藍色或黃色位於最重要的位。 |
PRIMARY_ORDER_BCA | 裝置輸出順序為 GBR 或 MYC。 綠色或 magenta 在最小顯著位中;紅色或青色位於最重要的位。 |
PRIMARY_ORDER_CBA | 裝置輸出順序為 BGR 或 YMC。 藍色或黃色位於最小有效位中;紅色或青色位於最重要的位。 |
PRIMARY_ORDER_CAB | 裝置輸出順序為 BRG 或 YCM。 藍色或黃色位於最小有效位中;綠色或magenta位於最重要的位。 |
ulHTPatternSize
指定半色調圖樣的大小。 以 AXB M 結尾的值是 AxB 模式的變化。換句話說,SIZEAx B 和 SIZE_AxB_M在 A xB 模式中以哪些圖元來亮起。 這個成員可以是下列其中一個值:
- 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
指定半色調的慣用輸出格式。 HT_FORMAT_4BPP只會使用 8 個完整濃度色彩,而HT_FORMATP_IRGB使用所有 16 種色彩,包括半濃度色彩。 假設每個色彩的 5 x 5 x 5 格式 (5 位) 用於HT_FORMAT_16BPP。 這個成員可以是下列其中一個值:
- HT_FORMAT_1BPP
- HT_FORMAT_4BPP
- HT_FORMAT_4BPP_IRGB
- HT_FORMAT_8BPP
- HT_FORMAT_16BPP
- HT_FORMAT_24BPP
- HT_FORMAT_32BPP
flHTFlags
指定描述裝置的旗標組合。 需要這些旗標才能進行半分。 這個成員可以是下列值的組合:
旗標 | 意義 |
---|---|
HT_FLAG_8BPP_CMY332_MASK | 旗標,用來清除 flHTFlags (位 24 到 31) 上八個位的旗標。 然後 ,您可以使用MAKE_CMY332_MASK 宏,以每圖元 CMY 模式的 8 位筆跡層級資訊來設定這些位。 如需詳細資訊,請參閱 使用 GDI 8 位每圖元 CMY 遮罩模式 。 |
HT_FLAG_ADDITIVE_PRIMS | 裝置主要是加法。 |
HT_FLAG_DO_DEVCLR_XFORM | 要求 GDI 執行泛型色彩校正。 |
HT_FLAG_HAS_BLACK_DYE | 裝置有個別的黑色油。 |
|
裝置中的紙張會吸收超過一般筆墨量,因此 GDI 應該將較少的筆跡轉譯成紙張。 這些旗標表示筆跡吸收的相對數量,HT_FLAG_HIGHER_INK_ABSORPTION表示比HT_FLAG_HIGH_INK_ABSORPTION更多的吸收,但小於HT_FLAG_HIGHEST_INK_ABSORPTION。 |
|
用來定義 HT_FLAG_HIGH/HIGHER/HIGHEST_INK_ABSORPTION 和 HT_FLAG_LOW/LOWER/LOWEST_INK_ABSORPTION 的旗標。 |
HT_FLAG_INK_HIGH_ABSORPTION | 用來定義 HT_FLAG_HIGH/HIGHER/HIGHEST_INK_ABSORPTION 的旗標。 |
HT_FLAG_INVERT_8BPP_BITMASK_IDX | GDI 半色調應該使用CMY_INVERTED模式調色盤轉譯每圖元的 8 位詢問模式表面點陣圖。 如需 CMY_INVERTED模式調色盤描述和需求,請參閱 使用 GDI 8 位每圖元 CMY 遮罩模式 。 |
|
裝置中的紙張會吸收小於一般筆墨量,因此 GDI 應該將更多的筆跡轉譯成紙張。 這些旗標表示筆跡吸收的相對數量,HT_FLAG_LOWER_INK_ABSORPTION表示小於HT_FLAG_LOW_INK_ABSORPTION,但超過HT_FLAG_LOWEST_INK_ABSORPTION。 |
HT_FLAG_NORMAL_INK_ABSORPTION | 裝置中的紙張會吸收一般筆墨量。 |
HT_FLAG_OUTPUT_CMY | 裝置使用 CMY 主要專案,而不是 RGB 主要。 此旗標值僅適用於 1 bpp 和 4 bpp 目的地介面。 |
HT_FLAG_PRINT_DRAFT_MODE | 停用 GDI 的反鋸齒程序代碼。 |
HT_FLAG_SQUARE_DEVICE_PEL | 裝置圖元是正方形的,而不是四捨五入 (只顯示 -- 印表機需要四捨五入的圖元) 。 |
HT_FLAG_USE_8BPP_BITMASK | 裝置使用單色列印。 |
ulVRefresh
目前顯示模式的視訊重新整理速率。 這是迷你埠驅動程序針對目前模式的重新整理速率所傳回的值。
控制台 中的顯示程式會顯示ulVRefresh成員中包含的重新整理速率。
ulBltAlignment
此成員表示位區塊傳輸至裝置的慣用 x 對齊方式。 值為零表示位區塊傳輸已加速;任何其他非負數表示位區塊傳輸並未加速,並提供慣用的水準對齊方式做為圖元倍數。
系統會使用這個值來判斷視窗位置的預設對齊方式,也可用來在安裝期間設定初始完整拖曳預設值。 值為零表示預設應該開啟完整拖曳;零以外的任何值表示預設應該關閉完整拖曳。
ulPanningHorzRes
ulPanningVertRes
驅動程序應該忽略,並維持零初始化狀態。
xPanningAlignment
yPanningAlignment
驅動程序應該忽略,並維持零初始化狀態。
cxHTPat
cyHTPat
分別指定使用者提供的半色調圖樣寬度和高度,以像素為單位。 cxHTPat 的值必須位於範圍HT_USERPAT_CX_MIN,以包含HT_USERPAT_CX_MAX。 cyHTPat 的值必須位於HT_USERPAT_CY_MIN範圍中,才能包含HT_USERPAT_CY_MAX。 這些常數定義於 winddi.h中。 如需詳細資訊,請參閱下列一節。
pHTPatA
pHTPatB
pHTPatC
依 ulPrimaryOrder 成員中的PRIMARY_ORDER_XXX值所定義,分別指向主要色彩 A、B 和 C 的使用者定義半色調模式。 每個 dyHTPat 必須是大小 cxHTPat 的有效二維位元組陣列。 如需詳細資訊,請參閱下列一節。
flShadeBlend
指定一組旗標,指出裝置的底紋和混合功能。 顯示驅動程序應該忽略這個成員,而且應該將它設定為零。 對於印表機驅動程式,驅動程式在此成員中放置的值是當應用程式呼叫 GetDeviceCaps (hdc、SHADEBLENDCAPS) 時所報告的值。 GetDeviceCaps 函式會在 Microsoft Window SDK 文件中說明。
ulPhysicalPixelCharacteristics
指定色彩片段設定為在顯示裝置上形成圖元的方式。 顯示裝置上的色彩片段可以依 RGB 順序排列,或以 BGR 順序排列,完全與 畫面緩衝區中的 RGB 順序無關。 色彩片段可以在水準等量中設定,其中一個數據列中的所有片段都是相同的色彩。 或者,可以在垂直等量中設定色彩片段,其中一個數據行中的所有片段都是相同的色彩。 建議使用垂直等量分割,因為它實際上會為每個圖元提供一個數據列中的三個不同的片段,藉此提供更高的水準子圖元解析度。
ulPhysicalPixelCharacteristics 成員必須設定為下表所示的其中一個值:
值 | 意義 |
---|---|
PPC_DEFAULT | 顯示裝置實體圖元資訊未知。 |
PPC_BGR_ORDER_HORIZONTAL_STRIPES | 顯示裝置上的實體色彩片段會依藍色、綠色和紅色片段的數據列從上到下排列。 |
PPC_BGR_ORDER_VERTICAL_STRIPES | 顯示裝置上的實體色彩片段會以藍色、綠色和紅色片段的數據行從左至右排列。 |
PPC_RGB_ORDER_HORIZONTAL_STRIPES | 顯示裝置上的實體色彩片段會以紅色、綠色和藍色片段的數據列從上到下排列。 |
PPC_RGB_ORDER_VERTICAL_STRIPES | 顯示裝置上的實體色彩片段會以紅色、綠色和藍色片段的數據行從左至右排列。 |
PPC_UNDEFINED |
顯示裝置實體像素資訊是已知的,但不能以其中一個指定的列舉表示。 列舉目前適用於以 SAML 為基礎的監視器。 當符合下列任一條件時,驅動程式應該將 ulPhysicalPixelCharacteristics 設定為 PPC_UNDEFINED。 (這份清單不完整,但涵蓋最常見的條件。)
|
ulPhysicalPixelGamma
指定顯示裝置的 Gamma。 這個成員應該設定為實體圖元的 gamma、縮放比例為 1000 或下列其中一個值。 例如,gamma 值 2.2 會以 2200 表示。
值 | 意義 |
---|---|
PPG_DEFAULT | 驅動程式對裝置沒有 Gamma 的知識。 |
PPG_SRGB | 裝置會使用 sRGB gamma。 |
備註
GDI 會在呼叫驅動程式提供的 DrvEnablePDEV 函式之前,先初始化這個結構。
xStyleStep、yStyleStep 和 denStyleStep 成員會定義外觀線條樣式在繪製外觀線條的每個圖元時,應該如何前進。 每個像素樣式的進階數量會定義為一個分數,取決於線條是 x 樣式還是 y 樣式。 如果線條為 x 樣式,則樣式會依 x 方向移動之每個圖元的小數 量 dx/D 前進。 否則,每個像素的樣式會以 Y 方向移動 ,以 dy/D 前進。
預先定義線條樣式中的點PS_DOT每一個單位長。 如果驅動程式將 xStyleStep 定義為一, 並將 denStyleStep 定義為 5,則虛線水平線包含 5 像素 on,後面接著 5 像素關閉,重複重複。
這三個數位的每一個都必須小於 65536,即使 caps 成員是 LONG 值也一樣。 驅動程式會定義這些樣式步驟,以確保線條中的點和破折號是輸出裝置上的美觀大小。 水平和垂直步驟可能不同,以針對非三維外觀比例進行更正。 例如,在 EGA 顯示器上,其像素高於寬度的 33%,您可以設定:
pdevcaps->xStyleStep = 3; // For an EGA
pdevcaps->yStyleStep = 4;
pdevcaps->denStyleStep = 12;
在此情況下,水平虛線是 4 像素開啟、4 像素關閉,因為每個像素的樣式會往前移 3/12 或 1/4。 垂直虛線是 3 像素開啟/3 像素關閉。
如果 x 和 y 樣式步驟平均分割成樣式分母,則樣式線條看起來會比較好,如同在上述範例中所做的一樣。 這會提供一律相同長度的虛線和點。
GDI 需要這項資訊,使其點陣圖函式可以模擬裝置在其本身介面上執行的確切功能。 應用程式可以存取這項資訊,以確切判斷要針對樣式線條開啟的圖元。 另請參閱 樣式外觀線條。
半色調相關成員 cxHTPat、cyHTPat、pHTPatA、pHTPatB 和 pHTPatC 可用於 OEM Unidrv 轉譯外掛程式,以定義由一或三種色彩組成的自定義半色調模式。 只有在 ulHTPatternSize 成員設定為HT_PATSIZE_USER時,才會檢查這些成員。 在此情況下,OEM 可以使用這些成員,根據儲存在資源檔或 OEM 自定義模組所產生的數據來定義自定義半色調模式。 cxHTPat 和 cyHTPat 成員會定義三維半色調模式陣列的每個大小。 pHTPatA、pHTPatB 和 pHTPatC 成員會指向每個色彩的個別圖樣陣列。 如果只使用一個模式陣列, 則 pHTPatA、 pHTPatB 和 pHTPatC 指向該陣列。
半色調模式中特定位置的每個位元組臨界值,都會決定對應輸出平面位置上的圖元是否開啟或關閉。 模式陣列中特定位置的零臨界值表示會忽略對應的圖元位置, (為黑色) 。 從 1 到 255 的臨界值會提供 255 層灰色的兩個模式;如果輸出平面中的圖元值大於或等於該位置的閾值,則會開啟圖元。 小於其對應閾值的圖元值會導致其像素在輸出平面中關閉。 如需詳細資訊,請參閱自定義 Microsoft 印表機驅動程式中的自定義半角。
規格需求
需求 | 值 |
---|---|
標頭 | winddi.h (包含Winddi.h) |