Win32 API 日本語リファレンス
ホームUI.Shell › ISharedBitmap

ISharedBitmap

COM
IID091162a4-bc96-411f-aae8-c5122cd03363継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ビットマップにアクセスするためのメモリ効率の良いメソッドを公開します。このインターフェイスは HBITMAP オブジェクトの薄いラッパーとして使用され、それらのオブジェクトを参照カウント可能にし、基になるデータが変更されないよう保護します。

解説(Remarks)

このインターフェイスは IThumbnailCache のメソッドと組み合わせて使用されます。IThumbnailCache::GetThumbnail および IThumbnailCache::GetThumbnailByID が返すビットマップは ISharedBitmap 型です。

ISharedBitmap オブジェクトがサムネイル キャッシュから取得される場合、パフォーマンス向上のため、基になるビットマップは共有メモリに存在することがあります。

メモリ マップされたビットマップの基になるデータは、クライアントがアクセスしている間は保護されます。

メソッド 5

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

vtbl 3 HRESULT GetSharedBitmap(HBITMAP* phbm)

ISharedBitmap オブジェクトに含まれるビットマップを取得します。

phbmHBITMAP*outビットマップへのハンドルを指すポインター。

戻り値

型: HRESULT

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

解説(Remarks)

取得されるビットマップは共有メモリに存在する場合があります。

vtbl 4 HRESULT GetSize(SIZE* pSize)

ISharedBitmap オブジェクトに含まれるビットマップのサイズを取得します。

pSizeSIZE*outこのメソッドが返るときに、含まれるビットマップのサイズ(ピクセル単位)を指定する値へのポインターが格納されます。

戻り値

型: HRESULT

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

vtbl 5 HRESULT GetFormat(WTS_ALPHATYPE* pat)

ビットマップ イメージのアルファ タイプを取得します。

patWTS_ALPHATYPE*out

このメソッドが返るときに、ビットマップ イメージのアルファ タイプへのポインターが格納されます。次のいずれかの値になります。

WTSAT_RGB

ビットマップには透過用のアルファ チャネルが含まれていません。

WTSAT_ARGB

ビットマップには透過用のアルファ チャネルが含まれています。

戻り値

型: HRESULT

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

vtbl 6 HRESULT InitializeBitmap(HBITMAP hbm, WTS_ALPHATYPE wtsAT)

指定されたビットマップで新しい ISharedBitmap オブジェクトを初期化します。

hbmHBITMAPin新しい ISharedBitmap オブジェクトを初期化するためのビットマップへのハンドル。ビットマップは DIB でなければなりません。
wtsATWTS_ALPHATYPEin

ビットマップ イメージのアルファ タイプ。次のいずれかの値になります。

WTSAT_UNKNOWN

ビットマップにアルファ チャネルがあるかどうかを判別できません。

WTSAT_RGB

ビットマップには透過用のアルファ チャネルが含まれていません。

WTSAT_ARGB

ビットマップには透過用のアルファ チャネルが含まれています。

戻り値

型: HRESULT

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

解説(Remarks)

ISharedBitmap オブジェクトが(IThumbnailCache::GetThumbnailByIDIThumbnailCache::GetThumbnail メソッドによって返されるのではなく)クライアントによってインスタンス化された場合、基になるビットマップは共有メモリに存在しません。

vtbl 7 HRESULT Detach(HBITMAP* phbm)

ISharedBitmap オブジェクトに含まれるビットマップを取得します。含まれるビットマップが共有メモリに存在する場合はコピーを返します。

phbmHBITMAP*outこのメソッドが返るときに、取得するビットマップへのハンドルを指すポインターが格納されます。

戻り値

型: HRESULT

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

解説(Remarks)

取得されるビットマップが共有メモリに存在する場合は、ビットマップのコピーが返されます。Detach メソッドは、基になる共有メモリへの参照を解放しません。

取得されるビットマップが共有メモリに存在しない場合は、ビットマップ自体が返され、コピーは作成されません。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_ISharedBitmap "{091162A4-BC96-411F-AAE8-C5122CD03363}"
#usecom global ISharedBitmap IID_ISharedBitmap "{4DB26476-6787-4046-B836-E8412A9E8A27}"
#comfunc global ISharedBitmap_GetSharedBitmap   3 sptr
#comfunc global ISharedBitmap_GetSize           4 var
#comfunc global ISharedBitmap_GetFormat         5 var
#comfunc global ISharedBitmap_InitializeBitmap  6 sptr,int
#comfunc global ISharedBitmap_Detach            7 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。