ID2D1Bitmap
COM公式ドキュメント
ID2D1RenderTarget にバインドされたビットマップを表します。
解説(Remarks)
ID2D1Bitmap オブジェクトの作成
ビットマップを作成するには、そのビットマップを描画するレンダーターゲットの次のいずれかのメソッドを使用します。Direct2D ビットマップがサポートするピクセルフォーマットについては、Supported Pixel Formats and Alpha Modes を参照してください。
ID2D1Bitmap はデバイス依存のリソースです。アプリケーションは、ビットマップを使用するレンダーターゲットを初期化した後にビットマップを作成し、レンダーターゲットの再作成が必要になったときにはビットマップも再作成する必要があります。(リソースの詳細については、Resources Overview を参照してください。)
例
WIC ビットマップから ID2D1Bitmap を作成する方法を示す例については、How to Load a Bitmap from a File および How to Load a Bitmap from a Resource を参照してください。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ビットマップのサイズをデバイス非依存ピクセル (DIP) 単位で返します。
戻り値
Type: D2D1_SIZE_F
ビットマップのサイズ (DIP 単位)。
解説(Remarks)
DIP は 1 インチの 1/96 です。デバイスピクセル単位でサイズを取得するには、ID2D1Bitmap::GetPixelSize メソッドを使用します。
ビットマップのサイズをデバイス依存単位 (ピクセル) で返します。
戻り値
Type: D2D1_SIZE_U
ビットマップのサイズ (ピクセル単位)。
ビットマップのピクセルフォーマットとアルファモードを取得します。
戻り値
Type: D2D1_PIXEL_FORMAT
ビットマップのピクセルフォーマットとアルファモード。
ビットマップのドット/インチ (DPI) を返します。
| dpiX | FLOAT* | out | 画像の水平方向の DPI。このパラメーターには記憶域を割り当てておく必要があります。 |
| dpiY | FLOAT* | out | 画像の垂直方向の DPI。このパラメーターには記憶域を割り当てておく必要があります。 |
指定したビットマップの指定した領域を現在のビットマップにコピーします。
| destPoint | D2D_POINT_2U* | inoptional | 現在のビットマップにおいて、srcRect で指定した領域のコピー先となる領域の左上隅。 |
| bitmap | ID2D1Bitmap* | in | コピー元のビットマップ。 |
| srcRect | D2D_RECT_U* | inoptional | コピーする bitmap の領域。 |
戻り値
解説(Remarks)
このメソッドは現在のビットマップのサイズを更新しません。コピー元ビットマップの内容が現在のビットマップに収まらない場合、このメソッドは失敗します。また、このメソッドはフォーマット変換を行わないため、ビットマップのフォーマットが一致しない場合は失敗します。
ビットマップがバッチ内でアクティブな場合、このメソッドを呼び出すと現在のバッチがフラッシュされることがあります。フラッシュされたバッチが正常に完了しなかった場合、このメソッドは失敗します。ただし、このメソッドはバッチがフラッシュされたレンダーターゲットのエラー状態をクリアしません。失敗した HRESULT とタグの状態は、次に EndDraw または Flush を呼び出したときに返されます。
Windows 8.1 以降、このメソッドはブロック圧縮ビットマップをサポートします。ブロック圧縮フォーマットを使用している場合、srcRect パラメーターの終端座標は 4 の倍数でなければならず、そうでない場合はメソッドが E_INVALIDARG を返します。
指定したレンダーターゲットの指定した領域を現在のビットマップにコピーします。
| destPoint | D2D_POINT_2U* | inoptional | 現在のビットマップにおいて、srcRect で指定した領域のコピー先となる領域の左上隅。 |
| renderTarget | ID2D1RenderTarget* | in | コピーする領域を含むレンダーターゲット。 |
| srcRect | D2D_RECT_U* | inoptional | コピーする renderTarget の領域。 |
戻り値
解説(Remarks)
このメソッドは現在のビットマップのサイズを更新しません。コピー元ビットマップの内容が現在のビットマップに収まらない場合、このメソッドは失敗します。また、このメソッドはフォーマット変換を行わないため、ビットマップのフォーマットが一致しない場合は失敗します。
ビットマップがバッチ内でアクティブな場合、このメソッドを呼び出すと現在のバッチがフラッシュされることがあります。フラッシュされたバッチが正常に完了しなかった場合、このメソッドは失敗します。ただし、このメソッドはバッチがフラッシュされたレンダーターゲットのエラー状態をクリアしません。失敗した HRESULT とタグの状態は、次に EndDraw または Flush を呼び出したときに返されます。
このメソッドを呼び出す前に、すべてのクリップとレイヤーをレンダーターゲットからポップしておく必要があります。レンダーターゲットに現在クリップまたはレイヤーが適用されている場合、このメソッドは D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT を返します。
メモリ内の指定した領域を現在のビットマップにコピーします。
| dstRect | D2D_RECT_U* | inoptional | 現在のビットマップにおいて、srcRect で指定した領域のコピー先となる矩形。 |
| srcData | void* | in | コピーするデータ。 |
| pitch | DWORD | in | srcData に格納されたコピー元ビットマップのストライド (ピッチ)。ストライドとは、1 走査線 (メモリ上のピクセル 1 行) のバイト数です。ストライドは次の式で計算できます: ピクセル幅 * ピクセルあたりのバイト数 + メモリのパディング。 |
戻り値
解説(Remarks)
このメソッドは現在のビットマップのサイズを更新しません。コピー元ビットマップの内容が現在のビットマップに収まらない場合、このメソッドは失敗します。また、このメソッドはフォーマット変換を行わないため、2 つのビットマップのフォーマットは一致している必要があります。
無効な入力 (無効なコピー先矩形など) がこのメソッドに渡された場合、画像の歪みやデバイスの障害など、予測できない結果を生じることがあります。
ビットマップがバッチ内でアクティブな場合、このメソッドを呼び出すと現在のバッチがフラッシュされることがあります。フラッシュされたバッチが正常に完了しなかった場合、このメソッドは失敗します。ただし、このメソッドはバッチがフラッシュされたレンダーターゲットのエラー状態をクリアしません。失敗した HRESULT とタグの状態は、次に EndDraw または Flush を呼び出したときに返されます。
Windows 8.1 以降、このメソッドはブロック圧縮ビットマップをサポートします。ブロック圧縮フォーマットを使用している場合、srcRect パラメーターの終端座標は 4 の倍数でなければならず、そうでない場合はメソッドが E_INVALIDARG を返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID2D1Bitmap "{A2296057-EA42-4099-983B-539FB6505426}" #usecom global ID2D1Bitmap IID_ID2D1Bitmap "{}" #comfunc global ID2D1Bitmap_GetSize 4 #comfunc global ID2D1Bitmap_GetPixelSize 5 #comfunc global ID2D1Bitmap_GetPixelFormat 6 #comfunc global ID2D1Bitmap_GetDpi 7 var,var #comfunc global ID2D1Bitmap_CopyFromBitmap 8 var,sptr,var #comfunc global ID2D1Bitmap_CopyFromRenderTarget 9 var,sptr,var #comfunc global ID2D1Bitmap_CopyFromMemory 10 var,sptr,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ID2D1Bitmap "{A2296057-EA42-4099-983B-539FB6505426}" #usecom global ID2D1Bitmap IID_ID2D1Bitmap "{}" #comfunc global ID2D1Bitmap_GetSize 4 #comfunc global ID2D1Bitmap_GetPixelSize 5 #comfunc global ID2D1Bitmap_GetPixelFormat 6 #comfunc global ID2D1Bitmap_GetDpi 7 sptr,sptr #comfunc global ID2D1Bitmap_CopyFromBitmap 8 sptr,sptr,sptr #comfunc global ID2D1Bitmap_CopyFromRenderTarget 9 sptr,sptr,sptr #comfunc global ID2D1Bitmap_CopyFromMemory 10 sptr,sptr,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。