Win32 API 日本語リファレンス
ホームGraphics.DirectWrite › IDWriteBitmapRenderTarget

IDWriteBitmapRenderTarget

COM
IID5e5a32a3-8dff-4773-9ff6-0696eab77267継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

グリフのレンダリングに使用できる、32 ビットのデバイス非依存ビットマップとデバイスコンテキストをカプセル化します。

解説(Remarks)

IDWriteBitmapRenderTarget は、次のコードに示すように IDWriteGdiInterop::CreateBitmapRenderTarget メソッドを使用して作成します。

if (SUCCEEDED(hr))
{
    hr = g_pGdiInterop->CreateBitmapRenderTarget(hdc, r.right, r.bottom, &g_pBitmapRenderTarget);
}

IDWriteGdiInterop::CreateBitmapRenderTarget は、DC のハンドルと目的の幅および高さを受け取ります。上記の例では、指定した幅と高さはウィンドウ矩形のサイズです。

レンダリング

ビットマップへのレンダリングに IDWriteBitmapRenderTarget を使用する 1 つの方法は、IDWriteTextRenderer インターフェイスから派生したカスタムレンダラーインターフェイスを実装することです。カスタムレンダラーの DrawGlyphRun メソッドの実装内で、次のコードに示すように IDWriteBitmapRenderTarget::DrawGlyphRun メソッドを呼び出してグリフを描画します。
STDMETHODIMP GdiTextRenderer::DrawGlyphRun(
    __maybenull void* clientDrawingContext,
    FLOAT baselineOriginX,
    FLOAT baselineOriginY,
    DWRITE_MEASURING_MODE measuringMode,
    __in DWRITE_GLYPH_RUN const* glyphRun,
    __in DWRITE_GLYPH_RUN_DESCRIPTION const* glyphRunDescription,
    IUnknown* clientDrawingEffect
    )
{
    HRESULT hr = S_OK;

    // Pass on the drawing call to the render target to do the real work.
    RECT dirtyRect = {0};

    hr = pRenderTarget_->DrawGlyphRun(
        baselineOriginX,
        baselineOriginY,
        measuringMode,
        glyphRun,
        pRenderingParams_,
        RGB(0,200,255),
        &dirtyRect
        );
    

    return hr;
}

IDWriteBitmapRenderTarget は、メモリ内のビットマップをカプセル化し、そこへレンダリングします。GetMemoryDC 関数は、このビットマップのデバイスコンテキストのハンドルを返します。

メソッド 8

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT DrawGlyphRun(FLOAT baselineOriginX, FLOAT baselineOriginY, DWRITE_MEASURING_MODE measuringMode, DWRITE_GLYPH_RUN* glyphRun, IDWriteRenderingParams* renderingParams, COLORREF textColor, RECT* blackBoxRect)

指定した位置にあるビットマップターゲットへグリフのランを描画します。

baselineOriginXFLOATinDIB の左上隅を基準とした、ベースライン原点の水平位置(DIP 単位)。
baselineOriginYFLOATinDIB の左上隅を基準とした、ベースライン原点の垂直位置(DIP 単位)。
measuringModeDWRITE_MEASURING_MODEinラン内のグリフの計測方法。他のプロパティと組み合わせてレンダリングモードを決定するために使用されます。
glyphRunDWRITE_GLYPH_RUN*inグリフランのプロパティを格納する構造体。
renderingParamsIDWriteRenderingParams*inレンダリング動作を制御するオブジェクト。
textColorCOLORREFinテキストの前景色。
blackBoxRectRECT*outoptionalグリフランの描画によって影響を受けるすべてのピクセルの境界ボックス(DIP ではなくピクセル単位)を受け取る省略可能な矩形。ブラックボックス矩形はビットマップの寸法を超えて広がる場合があります。

戻り値

Type: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

IDWriteBitmapRenderTarget::DrawGlyphRun を使用すると、実装したカスタムテキストレンダラーからビットマップへレンダリングできます。カスタムテキストレンダラーは、次のコードに示すように IDWriteTextRenderer::DrawGlyphRun コールバックメソッド内からこのメソッドを呼び出す必要があります。

STDMETHODIMP GdiTextRenderer::DrawGlyphRun(
    __maybenull void* clientDrawingContext,
    FLOAT baselineOriginX,
    FLOAT baselineOriginY,
    DWRITE_MEASURING_MODE measuringMode,
    __in DWRITE_GLYPH_RUN const* glyphRun,
    __in DWRITE_GLYPH_RUN_DESCRIPTION const* glyphRunDescription,
    IUnknown* clientDrawingEffect
    )
{
    HRESULT hr = S_OK;

    // Pass on the drawing call to the render target to do the real work.
    RECT dirtyRect = {0};

    hr = pRenderTarget_->DrawGlyphRun(
        baselineOriginX,
        baselineOriginY,
        measuringMode,
        glyphRun,
        pRenderingParams_,
        RGB(0,200,255),
        &dirtyRect
        );
    

    return hr;
}

baselineOriginXbaslineOriginYmeasuringMethodglyphRun の各パラメーターは、コールバックメソッドが呼び出されるときに(引数として)提供されます。renderingParamstextColorblackBoxRect は提供されません。

既定のレンダリングパラメーターは、IDWriteFactory::CreateMonitorRenderingParams メソッドを使用して取得できます。

vtbl 4 HDC GetMemoryDC()

メモリデバイスコンテキストのハンドルを取得します。

戻り値

Type: HDC

メモリデバイスコンテキストへのデバイスコンテキストハンドルを返します。

解説(Remarks)

アプリケーションは、このデバイスコンテキストを使用して GDI 関数で描画できます。アプリケーションは、GetCurrentObject を呼び出すことでビットマップハンドル (HBITMAP) を取得できます。ピクセルデータへのポインターを含む、基になるビットマップに関する情報を必要とするアプリケーションは、GetObject を呼び出して DIBSECTION 構造体を埋めることができます。ビットマップは常に 32 ビットの トップダウン DIB です。

このメソッドはパラメーターを受け取らず、HRESULT ではなく HDC 変数を返す点に注意してください。

memoryHdc = g_pBitmapRenderTarget->GetMemoryDC();

ここで返される HDC は依然としてビットマップレンダーターゲットオブジェクトが所有しており、クライアントが解放または削除してはなりません。

vtbl 5 FLOAT GetPixelsPerDip()

DIP あたりのビットマップピクセル数を取得します。

戻り値

Type: FLOAT

DIP あたりのビットマップピクセル数。

解説(Remarks)

DIP(デバイス非依存ピクセル)は 1/96 インチです。したがって、この値は 1 インチあたりのピクセル数を 96 で割った値です。

vtbl 6 HRESULT SetPixelsPerDip(FLOAT pixelsPerDip)

DIP(デバイス非依存ピクセル)あたりのビットマップピクセル数を設定します。DIP は 1/96 インチであるため、この値は 1 インチあたりのピクセル数を 96 で割った値です。

pixelsPerDipFLOATinDIP あたりのピクセル数を指定する値。

戻り値

Type: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 7 HRESULT GetCurrentTransform(DWRITE_MATRIX* transform)

抽象座標を DIP にマッピングする変換を取得します。既定ではこれは恒等変換です。これは、基になるデバイスコンテキストのワールド変換とは無関係である点に注意してください。

transformDWRITE_MATRIX*outこのメソッドが返るときに、変換行列を格納します。

戻り値

Type: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 8 HRESULT SetCurrentTransform(DWRITE_MATRIX* transform)

抽象座標を DIP(デバイス非依存ピクセル)にマッピングする変換を設定します。これは、基になるデバイスコンテキストのワールド変換には影響しません。

transformDWRITE_MATRIX*inoptional新しい変換を指定します。このパラメーターには NULL を指定でき、その場合は恒等変換が暗黙的に適用されます。

戻り値

Type: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 9 HRESULT GetSize(SIZE* size)

ターゲットビットマップの寸法を取得します。

sizeSIZE*outビットマップの幅と高さをピクセル単位で返します。

戻り値

Type: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 10 HRESULT Resize(DWORD width, DWORD height)

ビットマップのサイズを変更します。

widthDWORDin新しいビットマップの幅(ピクセル単位)。
heightDWORDin新しいビットマップの高さ(ピクセル単位)。

戻り値

Type: HRESULT

このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IDWriteBitmapRenderTarget "{5E5A32A3-8DFF-4773-9FF6-0696EAB77267}"
#usecom global IDWriteBitmapRenderTarget IID_IDWriteBitmapRenderTarget "{}"
#comfunc global IDWriteBitmapRenderTarget_DrawGlyphRun         3 float,float,int,var,sptr,int,var
#comfunc global IDWriteBitmapRenderTarget_GetMemoryDC          4
#comfunc global IDWriteBitmapRenderTarget_GetPixelsPerDip      5
#comfunc global IDWriteBitmapRenderTarget_SetPixelsPerDip      6 float
#comfunc global IDWriteBitmapRenderTarget_GetCurrentTransform  7 var
#comfunc global IDWriteBitmapRenderTarget_SetCurrentTransform  8 var
#comfunc global IDWriteBitmapRenderTarget_GetSize              9 var
#comfunc global IDWriteBitmapRenderTarget_Resize               10 int,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。