IWICBitmapDecoder
COM公式ドキュメント
デコーダーを表すメソッドを公開します。
解説(Remarks)
このインターフェイスには、プラットフォームが提供する各標準デコーダーを表す具体的な実装が多数あります。対象には、ビットマップ (BMP)、Portable Network Graphics (PNG)、アイコン (ICO)、Joint Photographic Experts Group (JPEG)、Graphics Interchange Format (GIF)、Tagged Image File Format (TIFF)、Microsoft Windows Digital Photo (WDP) が含まれます。次の表に、各ネイティブデコーダーのクラス識別子 (CLSID) を示します。
| CLSID Name | CLSID |
|---|---|
| CLSID_WICBmpDecoder | 0x6b462062, 0x7cbf, 0x400d, 0x9f, 0xdb, 0x81, 0x3d, 0xd1, 0xf, 0x27, 0x78 |
| CLSID_WICGifDecoder | 0x381dda3c, 0x9ce9, 0x4834, 0xa2, 0x3e, 0x1f, 0x98, 0xf8, 0xfc, 0x52, 0xbe |
| CLSID_WICHeifDecoder | 0xe9a4a80a, 0x44fe, 0x4de4, 0x89, 0x71, 0x71, 0x50, 0xb1, 0x0a, 0x51, 0x99 |
| CLSID_WICIcoDecoder | 0xc61bfcdf, 0x2e0f, 0x4aad, 0xa8, 0xd7, 0xe0, 0x6b, 0xaf, 0xeb, 0xcd, 0xfe |
| CLSID_WICJpegDecoder | 0x9456a480, 0xe88b, 0x43ea, 0x9e, 0x73, 0xb, 0x2d, 0x9b, 0x71, 0xb1, 0xca |
| CLSID_WICPngDecoder | 0x389ea17b, 0x5078, 0x4cde, 0xb6, 0xef, 0x25, 0xc1, 0x51, 0x75, 0xc7, 0x51 |
| CLSID_WICTiffDecoder | 0xb54e85d9, 0xfe23, 0x499f, 0x8b, 0x88, 0x6a, 0xce, 0xa7, 0x13, 0x75, 0x2b |
| CLSID_WICWebpDecoder | 0x7693e886, 0x51c9, 0x4070, 0x84, 0x19, 0x9f, 0x70, 0X73, 0X8e, 0Xc8, 0Xfa |
| CLSID_WICWmpDecoder | 0xa26cec36, 0x234c, 0x4950, 0xae, 0x16, 0xe3, 0x4a, 0xac, 0xe7, 0x1d, 0x0d |
このインターフェイスは、拡張性モデルの一部として、サードパーティ製コーデックのサポートを提供するためにサブクラス化できます。AITCodec Sample CODEC を参照してください。
登録されていない TIFF コンテナー形式として記述されたコーデックは、TIFF イメージとしてデコードされます。クライアントアプリケーションは、フレーム数がゼロかどうかを確認して、コーデックが有効かどうかを判断する必要があります。
CLSID_WICHeifDecoder は、HEIF (High Efficiency Image Format) イメージを処理します。
メソッド 11
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定したストリームに基づいて、デコーダーの機能を取得します。
| pIStream | IStream* | in | デコーダーの機能を取得する対象のストリーム。 |
| pdwCapability | DWORD* | out | デコーダーの WICBitmapDecoderCapabilities。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
カスタムデコーダーの実装では、指定した IStream の現在位置を保存し、指定されたストリームに対して提供できる機能を判断するために必要な情報を読み取ってから、ストリームの位置を元に戻す必要があります。
指定したストリームでデコーダーを初期化します。
| pIStream | IStream* | in | 初期化に使用するストリーム。 このストリームにはエンコードされたピクセルが含まれており、IWICBitmapFrameDecode インターフェイスの CopyPixels メソッド (GetFrame を参照) が呼び出されるたびにデコードされます。 |
| cacheOptions | WICDecodeOptions | in | 初期化に使用する WICDecodeOptions。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
イメージのコンテナー形式を取得します。
| pguidContainerFormat | GUID* | out | イメージのコンテナー形式 GUID を受け取るポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
イメージの IWICBitmapDecoderInfo を取得します。
| ppIDecoderInfo | IWICBitmapDecoderInfo** | out | IWICBitmapDecoderInfo へのポインターを受け取るポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
デコーダーの IWICPalette をコピーします。
| pIPalette | IWICPalette* | in | デコーダーのグローバルパレットのコピー先となる IWICPalette。CopyPalette を呼び出す前に、CreatePalette を使用してコピー先パレットを作成してください。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
CopyPalette は、グローバルパレット (イメージ内のすべてのフレームに適用されるパレット) が存在する場合はそれを返します。存在しない場合は WINCODEC_ERR_PALETTEUNAVAILABLE を返します。イメージにグローバルパレットがない場合でも、フレームレベルのパレットが存在することがあり、それは IWICBitmapFrameDecode::CopyPalette を使用して取得できます。
デコーダーからメタデータクエリリーダーを取得します。
| ppIMetadataQueryReader | IWICMetadataQueryReader** | out | デコーダーの IWICMetadataQueryReader へのポインターを受け取ります。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
イメージ形式がコンテナーレベルのメタデータをサポートしていない場合、このメソッドは WINCODEC_ERR_UNSUPPORTEDOPERATION を返します。Windows が提供するイメージ形式のうち、コンテナーレベルのメタデータをサポートするのは GIF のみです。代わりに IWICBitmapFrameDecode::GetMetadataQueryReader を使用してください。
サポートされている場合、プレビューイメージを取得します。
| ppIBitmapSource | IWICBitmapSource** | out | サポートされている場合、プレビュービットマップへのポインターを受け取ります。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
すべての形式がプレビューをサポートしているわけではありません。プレビューをサポートするのは、ネイティブの Microsoft Windows Digital Photo (WDP) コーデックのみです。
イメージの IWICColorContext オブジェクトを取得します。
| cCount | DWORD | in | 取得するカラーコンテキストの数。 この値は、ppIColorContexts に使用可能なサイズと等しいか、それより小さくする必要があります。 |
| ppIColorContexts | IWICColorContext** | inout | IWICColorContext へのポインターを受け取るポインター。 |
| pcActualCount | DWORD* | out | イメージに含まれるカラーコンテキストの数を受け取るポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
イメージのビットマップサムネイルが存在する場合、それを取得します。
| ppIThumbnail | IWICBitmapSource** | out | サムネイルの IWICBitmapSource へのポインターを受け取ります。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
返されるサムネイルは任意のサイズになり得るため、呼び出し元はサムネイルを目的のサイズに拡大縮小する必要があります。Windows が提供するイメージ形式のうち、サムネイルをサポートするのは JPEG、TIFF、JPEG-XR のみです。サムネイルが使用できない場合、このメソッドは WINCODEC_ERR_CODECNOTHUMBNAIL を返します。
イメージ内のフレームの総数を取得します。
| pCount | DWORD* | out | イメージ内のフレームの総数を受け取るポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
イメージの指定したフレームを取得します。
| index | DWORD | in | 取得する対象の特定のフレーム。 |
| ppIBitmapFrame | IWICBitmapFrameDecode** | out | IWICBitmapFrameDecode へのポインターを受け取るポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWICBitmapDecoder "{9EDDE9E7-8DEE-47EA-99DF-E6FAF2ED44BF}" #usecom global IWICBitmapDecoder IID_IWICBitmapDecoder "{}" #comfunc global IWICBitmapDecoder_QueryCapability 3 sptr,var #comfunc global IWICBitmapDecoder_Initialize 4 sptr,int #comfunc global IWICBitmapDecoder_GetContainerFormat 5 var #comfunc global IWICBitmapDecoder_GetDecoderInfo 6 sptr #comfunc global IWICBitmapDecoder_CopyPalette 7 sptr #comfunc global IWICBitmapDecoder_GetMetadataQueryReader 8 sptr #comfunc global IWICBitmapDecoder_GetPreview 9 sptr #comfunc global IWICBitmapDecoder_GetColorContexts 10 int,sptr,var #comfunc global IWICBitmapDecoder_GetThumbnail 11 sptr #comfunc global IWICBitmapDecoder_GetFrameCount 12 var #comfunc global IWICBitmapDecoder_GetFrame 13 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IWICBitmapDecoder "{9EDDE9E7-8DEE-47EA-99DF-E6FAF2ED44BF}" #usecom global IWICBitmapDecoder IID_IWICBitmapDecoder "{}" #comfunc global IWICBitmapDecoder_QueryCapability 3 sptr,sptr #comfunc global IWICBitmapDecoder_Initialize 4 sptr,int #comfunc global IWICBitmapDecoder_GetContainerFormat 5 sptr #comfunc global IWICBitmapDecoder_GetDecoderInfo 6 sptr #comfunc global IWICBitmapDecoder_CopyPalette 7 sptr #comfunc global IWICBitmapDecoder_GetMetadataQueryReader 8 sptr #comfunc global IWICBitmapDecoder_GetPreview 9 sptr #comfunc global IWICBitmapDecoder_GetColorContexts 10 int,sptr,sptr #comfunc global IWICBitmapDecoder_GetThumbnail 11 sptr #comfunc global IWICBitmapDecoder_GetFrameCount 12 sptr #comfunc global IWICBitmapDecoder_GetFrame 13 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。