IDWriteGlyphRunAnalysis
COM公式ドキュメント
グリフランのレンダリングに使用される低レベル情報を格納します。
解説(Remarks)
アルファテクスチャは、2値(bi-level)アルファテクスチャまたは ClearType アルファテクスチャのいずれかになります。
2値アルファテクスチャは1ピクセルあたり1バイトを含むため、2値テクスチャ用バッファのサイズはテクスチャ境界の面積(バイト単位)になります。CreateAlphaTexture によって作成された2値アルファテクスチャの各バイトは、DWRITE_ALPHA_MAX(つまり 255)またはゼロのいずれかに設定されます。
ClearType アルファテクスチャは1ピクセルあたり3バイトを含むため、ClearType アルファテクスチャ用バッファのサイズはテクスチャ境界の面積の3倍(バイト単位)になります。
例
次のコード例は、グリフラン解析オブジェクトを作成する方法を示しています。この例では、空のグリフランを使用しています。
HRESULT CreateGlyphRunAnalysis(IDWriteFontFace *pFontFace, IDWriteGlyphRunAnalysis **ppGlyphRunAnalysis)
{
HRESULT hr = S_OK;
IDWriteFactory* pDWriteFactory = NULL;
// Create the DirectWrite factory.
hr = DWriteCreateFactory(
DWRITE_FACTORY_TYPE_SHARED,
__uuidof(IDWriteFactory),
reinterpret_cast<IUnknown**>(&pDWriteFactory)
);
DWRITE_GLYPH_RUN emptyGlyphRun = { 0 };
UINT16 glyphIndex = 0;
emptyGlyphRun.fontFace = pFontFace;
emptyGlyphRun.glyphIndices = &glyphIndex;
emptyGlyphRun.glyphCount = 0;
emptyGlyphRun.fontEmSize = 12;
IDWriteGlyphRunAnalysis* pGlyphRunAnalysis = NULL;
if (SUCCEEDED(hr))
{
hr = pDWriteFactory->CreateGlyphRunAnalysis(
&emptyGlyphRun,
1.0f, // pixelsPerDip,
NULL, // transform,
DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC,
DWRITE_MEASURING_MODE_GDI_CLASSIC,
0.0f, // baselineOriginX,
0.0f, // baselineOriginY,
&pGlyphRunAnalysis);
}
*ppGlyphRunAnalysis = pGlyphRunAnalysis;
SafeRelease(&pDWriteFactory);
return S_OK;
}
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
グリフランの影響を受ける物理ピクセルの境界矩形を取得します。
| textureType | DWRITE_TEXTURE_TYPE | in | 要求するテクスチャの種類を指定します。2値テクスチャが要求された場合、境界矩形には2値グリフのみが含まれます。それ以外の場合、境界矩形にはアンチエイリアス処理されたグリフのみが含まれます。 |
| textureBounds | RECT* | out | このメソッドが返るとき、グリフランの影響を受ける物理ピクセルの境界矩形を格納します。指定したテクスチャ種類のグリフが存在しない場合は空の矩形を格納します。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定した境界矩形内のグリフに対して、指定した種類のアルファテクスチャを作成します。
| textureType | DWRITE_TEXTURE_TYPE | in | 要求するテクスチャの種類を指定する値です。DWRITE_TEXTURE_BILEVEL_1x1 または DWRITE_TEXTURE_CLEARTYPE_3x1 を指定できます。2値テクスチャが要求された場合、テクスチャには2値グリフのみが含まれます。それ以外の場合、テクスチャにはアンチエイリアス処理されたグリフのみが含まれます。 |
| textureBounds | RECT* | in | テクスチャの境界矩形です。GetAlphaTextureBounds が返す境界矩形とは異なる場合があります。 |
| alphaValues | BYTE* | out | このメソッドが返るとき、テクスチャのアルファ値の配列を格納します。この配列に割り当てるバッファは、少なくとも bufferSize のサイズが必要です。 |
| bufferSize | DWORD | in | alphaValues 配列のサイズ(バイト単位)です。最小サイズは、矩形の寸法と要求するテクスチャの種類によって異なります。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
ClearType ブレンディングに必要なアルファブレンディングプロパティを取得します。
| renderingParams | IDWriteRenderingParams* | in | ClearType レベル、強調コントラスト、ガンマ、ピクセルジオメトリ、およびレンダリングモードを指定するオブジェクトです。ほとんどの場合、このメソッドの出力パラメーターが返す値は、このオブジェクトのプロパティに基づきます。ただし、GDI 互換のレンダリングモードが指定されている場合を除きます。 |
| blendGamma | FLOAT* | out | このメソッドが返るとき、ガンマ補正に使用するガンマ値を格納します。 |
| blendEnhancedContrast | FLOAT* | out | このメソッドが返るとき、ブレンディングに使用する強調コントラスト値を格納します。 |
| blendClearTypeLevel | FLOAT* | out | このメソッドが返るとき、アルファブレンディングで使用される ClearType レベルを格納します。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDWriteGlyphRunAnalysis "{7D97DBF7-E085-42D4-81E3-6A883BDED118}" #usecom global IDWriteGlyphRunAnalysis IID_IDWriteGlyphRunAnalysis "{}" #comfunc global IDWriteGlyphRunAnalysis_GetAlphaTextureBounds 3 int,var #comfunc global IDWriteGlyphRunAnalysis_CreateAlphaTexture 4 int,var,var,int #comfunc global IDWriteGlyphRunAnalysis_GetAlphaBlendParams 5 sptr,var,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IDWriteGlyphRunAnalysis "{7D97DBF7-E085-42D4-81E3-6A883BDED118}" #usecom global IDWriteGlyphRunAnalysis IID_IDWriteGlyphRunAnalysis "{}" #comfunc global IDWriteGlyphRunAnalysis_GetAlphaTextureBounds 3 int,sptr #comfunc global IDWriteGlyphRunAnalysis_CreateAlphaTexture 4 int,sptr,sptr,int #comfunc global IDWriteGlyphRunAnalysis_GetAlphaBlendParams 5 sptr,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。