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 のバイト順序は次の形式です。

ドライバーのバージョン番号を指定する ulVersion メンバーを示す図

上位 16 ビットは 0 に設定する必要があります。 ビット 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

各カラー プレーン内の隣接するビット数を指定します。 ピクセルあたりのビット数の合計は、 cBitsPixelcPlanes の積です。

cPlanes

カラー プレーンの数を指定します。

ulNumColors

淡色化されたデバイスの場合、 ulNumColors は既定のカラー パレット内のエントリの数を指定します。 非不安定なデバイス (プリンターを含まない) の場合、 ulNumColors は -1 に設定されます。

flRaster

は予約されており、0 に設定する必要があります。

ulLogPixelsX

デバイスの幅の解像度を 1 インチあたりの論理ピクセル単位で指定します。

プリンターの場合、このメンバーはプリンターの解像度 (dpi) に設定する必要があります。

ディスプレイの場合、このメンバーは 96 に設定する必要があります。

ulLogPixelsY

デバイスの高さ解像度を 1 インチあたりの論理ピクセル数で指定します。

プリンターの場合、このメンバーはプリンターの解像度 (dpi) に設定する必要があります。

ディスプレイの場合、このメンバーは 96 に設定する必要があります。

flTextCaps

Windows 3.1 テキスト機能を記述するフラグを指定します。 ドライバー TC_SCROLLBLT フラグがこのメンバーにある場合は、DrvBitBlt 関数または DrvCopyBits 関数ではなく、ドライバーが提供する DrvTextOut 関数を使用して、画面全体を再描画して、コンソールでテキストスクロールを実行する必要があることを示します。 画面間のビット ブロック転送が遅い場合、ドライバーはこのフラグを設定する必要があります。 このフラグが設定されていない場合、ドライバーは暗黙的に DrvBitBlt/DrvCopyBits を通じてテキスト スクロールを実行するコンソールを要求します。

ulDACRed

ulDACGreen

ulDACBlue

指定した色の DAC ビットの表示数を指定します。

ulAspectX

デバイス ピクセルの相対幅を 1 から 1000 の範囲で指定します。

ulAspectY

デバイス ピクセルの相対的な高さを 1 から 1000 の範囲で指定します。

ulAspectXY

ulAspectX と ulAspectY の平方和の平方根を指定します

xStyleStep

x-major 行 dx のスタイルアドバンスの分子を指定 します。 詳細については、次の 「解説 」セクションおよび スタイル付き化粧品ラインを参照してください。

yStyleStep

y-major 線 dy のスタイルアドバンスの分子を指定 します。 詳細については、次の 「解説 」セクションおよび スタイル付き化粧品ラインを参照してください。

denStyleStep

スタイルアドバンス D の分母を指定します。詳細については、次の 「解説 」セクションおよび スタイル付き化粧品ラインを参照してください。

ptlPhysOffset

サーフェスの書き込み不可能な余白のサイズ (ピクセル単位) を含む POINTL 構造体を指定します。

szlPhysSize

書き込み不可能な余白を含む、サーフェス全体のサイズをピクセル単位で含む SIZEL 構造体を指定します。 SIZEL 構造体は、 SIZE 構造体と同じです。

ulNumPalReg

インデックス付きデバイスのパレット レジスタの数を指定します。

ciDevice

CIE 座標空間でデバイスの色を定義する COLORINFO 構造体です。

ulDevicePelsDPI

プリンターの場合は、ピクセルが重なったり間隔を空けたりせずに並べてレイアウトされている場合は、1 インチあたりのピクセル数 (ドットまたはノズル) を指定します。 たとえば、ピクセルのサイズが 0.001 インチの場合、この値は 0.001 で 1 除算されます。 メンバーが 0 の場合、GDI ハーフトニングでは、すべてのピクセルが重なり合っていない状態で接続されている前提に基づいて、この数値が計算されます。

ほとんどのプリンターの物理ドット サイズは測定されたドット サイズよりも大きいため、GDI では、セル サイズ (パターン サイズ) に基づいて、配置できる物理ドットの数を概算するためにこの値を使用します。 次に、ログ回帰が実行され、最も直線的なものが決定されます。つまり、重複するデバイス ピクセル カバレッジ (ドット ゲイン) を最適化するために、最適なカバレッジを得るためにドットを配置する必要があります。

ディスプレイの場合、このメンバーは 0 に設定する必要があります。

ulPrimaryOrder

ハーフトーン出力のデバイスの原色または平面番号のビット順序を指定します。 このメンバーには、次の表に示す値のいずれかを指定できます。

フラグ 説明
PRIMARY_ORDER_ABC デバイスの出力順序は RGB または CMY です。 赤色またはシアンは最下位ビットです。青または黄色が最も重要なビットに含まれます。
PRIMARY_ORDER_ACB デバイスの出力順序は RBG または CYM です。 赤色またはシアンは最下位ビットです。緑またはマゼンタは最も重要なビットにあります。
PRIMARY_ORDER_BAC デバイスの出力順序は GRB または MCY です。 緑またはマゼンタは最下位ビットに含まれます。青または黄色が最も重要なビットに含まれます。
PRIMARY_ORDER_BCA デバイスの出力順序は GBR または MYC です。 緑またはマゼンタは最下位ビットに含まれます。赤またはシアンは最も重要なビットにあります。
PRIMARY_ORDER_CBA デバイスの出力順序は BGR または YMC です。 青または黄色は最下位ビットです。赤またはシアンは最も重要なビットにあります。
PRIMARY_ORDER_CAB デバイスの出力順序は BRG または YCM です。 青または黄色は最下位ビットです。緑またはマゼンタは最も重要なビットにあります。

ulHTPatternSize

ハーフトーン パターンのサイズを指定します。 AxB M で終わる値は、AxB パターンのバリエーションです。つまり、SIZEAxB と SIZE_AxB_M は、A x B パターンで点灯するピクセルによって異なります。 このメンバーには、次のいずれかの値を指定できます。

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 色をすべて使用します。 HT_FORMAT_16BPPには、5 x 5 x 5 の形式 (色あたり 5 ビット) が使用されていると想定されます。 このメンバーには、次のいずれかの値を指定できます。

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 の上位 8 ビット (ビット 24 から 31) をクリアするために使用されるフラグ。 その後、MAKE_CMY332_MASK マクロを使用して、これらのビットを 8 ビット/ピクセル CMY モードのインク レベル情報で設定できます。 詳細については、「 GDI 8 ビット/ピクセル CMY マスク モードの使用 」を参照してください。
HT_FLAG_ADDITIVE_PRIMS デバイスのプライマリは加法です。
HT_FLAG_DO_DEVCLR_XFORM 一般的な色の修正を実行するように GDI に要求します。
HT_FLAG_HAS_BLACK_DYE デバイスは、別々の黒い染料を持っています。
HT_FLAG_HIGH_INK_ABSORPTION
HT_FLAG_HIGHER_INK_ABSORPTION
HT_FLAG_HIGHEST_INK_ABSORPTION
デバイス内の用紙は通常よりも多くのインクを吸収するため、GDI は紙にレンダリングするインクを少なくする必要があります。 これらのフラグは、インクの相対的な吸収量を示HT_FLAG_HIGHER_INK_ABSORPTION、HT_FLAG_HIGH_INK_ABSORPTIONよりも吸収量が多いが、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
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 ビット/ピクセルの ask モードサーフェス ビットマップをレンダリングする必要があります。 CMY_INVERTED モード パレットの説明と要件については、「 GDI 8 ビット/ピクセル CMY マスク モードの使用」を参照してください。
HT_FLAG_LOW_INK_ABSORPTION
HT_FLAG_LOWER_INK_ABSORPTION
HT_FLAG_LOWEST_INK_ABSORPTION
デバイス内の用紙は通常よりも少ない量のインクを吸収するため、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 デバイスでは、RGB プライマリではなく CMY プライマリが使用されます。 このフラグ値は、1 つの bpp および 4 つの bpp 変換先サーフェスにのみ適用されます。
HT_FLAG_PRINT_DRAFT_MODE GDI のアンチエイリアス コードを無効にします。
HT_FLAG_SQUARE_DEVICE_PEL デバイスピクセルは丸ではなく正方形です(ディスプレイのみ -- プリンターは丸いピクセルを必要とします)。
HT_FLAG_USE_8BPP_BITMASK デバイスはモノクロ印刷を使用します。

ulVRefresh

現在の表示モードのビデオ更新レート。 これは、現在のモードの更新レートのミニポート ドライバーによって返される値です。

コントロール パネルの Display プログラムには、ulVRefresh メンバーに含まれる更新レートが表示されます。

ulBltAlignment

このメンバーは、デバイスへのビット ブロック転送に推奨される x アラインメントを示します。 値 0 は、ビット ブロック転送が高速化されることを示します。その他の負でない数値は、ビット ブロック転送が高速化されていないことを示し、推奨される水平方向の配置をピクセルの倍数として提供します。

この値は、ウィンドウ位置の既定の配置を決定するためにシステムによって使用され、セットアップ時に初期のフルドラッグの既定値を設定するためにも使用されます。 値 0 は、フル ドラッグが既定でオンになっていることを示します。0 以外の値は、フルドラッグが既定でオフになっていることを示します。

ulPanningHorzRes

ulPanningVertRes

ドライバーによって無視され、ゼロ初期化されたままになります。

xPanningAlignment

yPanningAlignment

ドライバーによって無視され、ゼロ初期化されたままになります。

cxHTPat

cyHTPat

ユーザー指定のハーフトーン ディザ パターンの幅と高さをピクセル単位で指定します。 cxHTPat の値は、HT_USERPAT_CX_MINからHT_USERPAT_CX_MAXまでの範囲内である必要があります。 cyHTPat の値は、HT_USERPAT_CY_MAXまでのHT_USERPAT_CY_MIN範囲内である必要があります。 これらの定数は winddi.h で定義されます。 詳細については、次 の「解説 」セクションを参照してください。

pHTPatA

pHTPatB

pHTPatC

ulPrimaryOrder メンバーのPRIMARY_ORDER_XXX値で定義されているように、主色 A、B、C のユーザー定義のハーフトーン ディザ パターンをそれぞれポイントします。 各ディザ パターンは、cyHTPat による cxHTPat サイズの有効な 2 次元バイト配列である必要があります。 詳細については、次 の「解説 」セクションを参照してください。

flShadeBlend

デバイスのシェーディング機能とブレンド機能を示すフラグのセットを指定します。 ディスプレイ ドライバーは、このメンバーを無視し、0 に設定したままにする必要があります。 プリンター ドライバーの場合、ドライバーがこのメンバーに配置する値は、アプリケーションが GetDeviceCaps(hdc, SHADEBLENDCAPS) を呼び出すときに GDI が報告する値です。 GetDeviceCaps 関数については、Microsoft Window SDK のドキュメントを参照してください。

ulPhysicalPixelCharacteristics

ディスプレイ デバイスでピクセルを形成するようにカラー フラグメントを構成する方法を指定します。 ディスプレイ デバイス上のカラー フラグメントは、 フレーム バッファー内の RGB 順序とは完全に関係なく、RGB 順または BGR 順に配置できます。 カラー フラグメントは、1 行のすべてのフラグメントが同じ色である水平ストライプで構成できます。 または、1 つの列内のすべてのフラグメントが同じ色である垂直ストライプで色フラグメントを構成することもできます。 垂直方向のストライピングは、ピクセルごとに 3 つの個別のフラグメントを 1 行に効果的に提供するため、水平方向のサブピクセル解像度が高くなります。

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 ディスプレイ デバイスの物理ピクセル情報は既知ですが、指定された列挙体の 1 つとして表現することはできません。 列挙体は現在、LCD ベースのモニターに適用できます。 次のいずれかの条件が満たされた場合、ドライバーは ulPhysicalPixelCharacteristics をPPC_UNDEFINEDに設定する必要があります。 (このリストは包括的ではありませんが、最も一般的な条件について説明します)。
  • ドライバーは、モニターが LCD デバイスではないことを認識しています。
  • デバイスは LCD デバイスですが、フレーム バッファーの解像度は、スケーリングを必要とする物理ディスプレイのネイティブ解像度とは異なります。 つまり、フレーム バッファー ピクセルとデバイス ピクセルの間に 1 対 1 の対応がなくなったため、スケーリングが必要になります。

ulPhysicalPixelGamma

表示装置のガンマを指定します。 このメンバーは、物理ピクセルのガンマ、1000 の係数でスケーリング、または次のいずれかの値に設定する必要があります。 たとえば、ガンマ値 2.2 は 2200 として表されます。

意味
PPG_DEFAULT ドライバーには、デバイスのガンマに関する知識がありません。
PPG_SRGB デバイスは sRGB ガンマを使用します。

注釈

GDI は、ドライバー提供の DrvEnablePDEV 関数を呼び出す前に、この構造体をゼロ初期化します。

xStyleStepyStyleStep、denStyleStep の各メンバーは、化粧線の各ピクセルを描画する際に、化粧線スタイルを進める方法を定義します。 各ピクセルのスタイルに沿って高度な量は、線が x スタイルか y スタイルかに依存する分数として定義されます。 線が x スタイルの場合、スタイルは x 方向に移動した各ピクセルの小数部の量 dx/D だけ進みます。 それ以外の場合、スタイルは y 方向に移動した各ピクセルに 対して dy/D で進みます。

定義済みの線スタイルPS_DOTのドットは、それぞれ 1 単位長です。 ドライバーで xStyleStep が 1 として定義され 、denStyleStep が 5 として定義されている場合、点線の水平線は 5 ピクセルオンで構成され、その後に 5 ピクセルオフが繰り返されます。

キャップ メンバーが LONG 値であっても、これら 3 つの数値はそれぞれ 65536 未満である必要があります。 これらのスタイルの手順は、ライン内のドットとダッシュが出力デバイスで適切なサイズになるように、ドライバーによって定義されます。 水平方向と垂直方向のステップは、非Trivial縦横比を修正するために異なる場合があります。 たとえば、ピクセルが幅よりも 33% 高い EGA ディスプレイでは、次のように設定できます。

pdevcaps->xStyleStep   =  3;    // For an EGA
pdevcaps->yStyleStep   =  4;
pdevcaps->denStyleStep = 12;

この場合、スタイルはピクセルごとに 3/12 または 1/4 進むため、水平方向の点線は 4 ピクセルオン、4 ピクセルオフです。 垂直点線は、3 ピクセルオン/3 ピクセルオフです。

スタイル付き線は、前の例のように、x と y の両方のスタイルステップをスタイル分母に均等に分割すると、見た目が良くなります。 これにより、常に同じ長さのダッシュとドットが表示されます。

GDI では、ビットマップ関数がデバイスが独自のサーフェイスで行うことを正確にエミュレートできるように、この情報が必要です。 アプリケーションはこの情報にアクセスして、スタイル付き線に対してどのピクセルをオンにするかを正確に判断できます。 「スタイル付き化粧線」も参照してください。

ハーフトーン関連のメンバー cxHTPatcyHTPatpHTPatApHTPatBおよび pHTPatC は、OEM Unidrv レンダリング プラグインで使用して、1 つまたは 3 つの色で構成されるカスタム ハーフトーン パターンを定義できます。 これらのメンバーは、 ulHTPatternSize メンバーが HT_PATSIZE_USER に設定されている場合にのみチェックされます。 この場合、OEM はこれらのメンバーを使用して、リソース ファイルに格納されているデータまたは OEM カスタマイズ モジュールによって生成されたデータに基づいて、カスタム ハーフトーン パターンを定義できます。 cxHTPat メンバーと cyHTPat メンバーは、3 つの 2 次元ハーフトーン パターン配列の各サイズを定義します。 pHTPatApHTPatB、および pHTPatC メンバーは、各色のそれぞれのパターン配列を指します。 パターン配列が 1 つだけ使用されている場合、 pHTPatApHTPatB および pHTPatC が指します。

ハーフトーン ディザ パターン内の特定の位置にある各バイトしきい値は、対応する出力プレーン位置のピクセルがオンかオフかを決定します。 パターン配列内の特定の位置のしきい値が 0 の場合は、対応するピクセル位置が無視されることを示します (黒)。 1 ~ 255 のしきい値は、255 レベルの灰色のディザ パターンを提供します。出力プレーン内のピクセル値がその場所のしきい値以上の場合、ピクセルはオンになります。 対応するしきい値より小さいピクセル値を指定すると、出力プレーンでそのピクセルがオフになります。 詳細については、「Microsoft のプリンター ドライバーのカスタマイズ」の「カスタマイズされたハーフトニング」を参照してください。

要件

要件
Header winddi.h (Winddi.h を含む)

こちらもご覧ください

CIECHROMA

COLORINFO

DrvBitBlt

DrvCopyBits

DrvEnablePDEV

DrvTextOut