IWICBitmapEncoder
COM公式ドキュメント
サムネイル、フレーム、パレットなど、エンコーダーのプロパティを設定するためのメソッドを定義します。
解説(Remarks)
このインターフェイスには、プラットフォームが提供する各標準エンコーダーを表す具体的な実装が多数あり、bitmap (BMP)、Portable Network Graphics (PNG)、Joint Photographic Experts Group (JPEG)、Graphics Interchange Format (GIF)、Tagged Image File Format (TIFF)、Microsoft Windows Digital Photo (WDP) が含まれます。次の表に、各ネイティブエンコーダーのクラス識別子 (CLSID) を示します。
| CLSID 名 | CLSID |
|---|---|
| CLSID_WICBmpEncoder | 0x69be8bb4, 0xd66d, 0x47c8, 0x86, 0x5a, 0xed, 0x15, 0x89, 0x43, 0x37, 0x82 |
| CLSID_WICGifEncoder | 0x114f5598, 0xb22, 0x40a0, 0x86, 0xa1, 0xc8, 0x3e, 0xa4, 0x95, 0xad, 0xbd |
| CLSID_WICHeifEncoder | 0x0dbecec1, 0x9eb3, 0x4860, 0x9c, 0x6f, 0xdd, 0xbe, 0x86, 0x63, 0x45, 0x75 |
| CLSID_WICJpegEncoder | 0x1a34f5c1, 0x4a5a, 0x46dc, 0xb6, 0x44, 0x1f, 0x45, 0x67, 0xe7, 0xa6, 0x76 |
| CLSID_WICPngEncoder | 0x27949969, 0x876a, 0x41d7, 0x94, 0x47, 0x56, 0x8f, 0x6a, 0x35, 0xa4, 0xdc |
| CLSID_WICTiffEncoder | 0x0131be10, 0x2001, 0x4c5f, 0xa9, 0xb0, 0xcc, 0x88, 0xfa, 0xb6, 0x4c, 0xe8 |
| CLSID_WICWmpEncoder | 0xac4ce3cb, 0xe1c1, 0x44cd, 0x82, 0x15, 0x5a, 0x16, 0x65, 0x50, 0x9e, 0xc2 |
さらに、このインターフェイスは拡張性モデルの一部としてサブクラス化し、サードパーティ製コーデックのサポートを提供することもできます。AITCodec Sample CODEC を参照してください。
CLSID_WICHeifDecoder は HEIF (High Efficiency Image Format) 画像を処理します。
メソッド 10
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
エンコーダーを IStream で初期化します。この IStream はビットのエンコード先をエンコーダーに指定します。
| pIStream | IStream* | in | 出力ストリーム。 |
| cacheOption | WICBitmapEncoderCacheOption | in | 初期化時に使用する WICBitmapEncoderCacheOption。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
エンコーダーのコンテナー形式を取得します。
| pguidContainerFormat | GUID* | out | エンコーダーのコンテナー形式 GUID を受け取るポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
エンコーダーの IWICBitmapEncoderInfo を取得します。
| ppIEncoderInfo | IWICBitmapEncoderInfo** | out | IWICBitmapEncoderInfo へのポインターを受け取るポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
エンコーダーの IWICColorContext オブジェクトを設定します。
| cCount | DWORD | in | 設定する IWICColorContext の数。 |
| ppIColorContext | IWICColorContext** | in | エンコーダーに設定するカラーコンテキストを含む IWICColorContext ポインターへのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
画像のグローバルパレットを設定します。
| pIPalette | IWICPalette* | in | グローバルパレットとして使用する IWICPalette。 |
戻り値
型: HRESULT
成功した場合は S_OK を返します。それ以外の場合はエラー値を返します。
エンコーダーがこの機能をサポートしていない場合は WINCODEC_ERR_UNSUPPORTEDOPERATION を返します。
解説(Remarks)
オプションのグローバルパレットをサポートするのは GIF 画像のみであり、画像にフレームを追加する前にグローバルパレットを設定する必要があります。パレットを設定する必要があるのは、インデックス付きのピクセル形式の場合のみです。
画像のグローバルサムネイルを設定します。
| pIThumbnail | IWICBitmapSource* | in | グローバルサムネイルとして設定する IWICBitmapSource。 |
戻り値
型: HRESULT
成功した場合は S_OK を返します。それ以外の場合はエラー値を返します。
エンコーダーがこの機能をサポートしていない場合は WINCODEC_ERR_UNSUPPORTEDOPERATION を返します。
画像のグローバルプレビューを設定します。
| pIPreview | IWICBitmapSource* | in | グローバルプレビューとして使用する IWICBitmapSource。 |
戻り値
型: HRESULT
成功した場合は S_OK を返します。それ以外の場合はエラー値を返します。
エンコーダーがこの機能をサポートしていない場合は WINCODEC_ERR_UNSUPPORTEDOPERATION を返します。
新しい IWICBitmapFrameEncode インスタンスを作成します。
| ppIFrameEncode | IWICBitmapFrameEncode** | out | 新しい IWICBitmapFrameEncode インスタンスへのポインターを受け取るポインター。 |
| ppIEncoderOptions | IPropertyBag2** | inout | 省略可能。後続のフレーム初期化で使用する名前付きプロパティを受け取ります。「解説」を参照してください。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
パラメーター ppIEncoderOptions を使用して、エンコーダーオプションの指定に利用できる IPropertyBag2 を受け取ることができます。これは、ppIEncoderOptions に NULL の IPropertyBag2 ポインターへのポインターを渡すことで行います。返される IPropertyBag2 は、指定した形式で利用可能なすべてのエンコーダーオプションを既定値で初期化した状態になっています。既定以外のエンコード動作を指定するには、IPropertyBag2 に必要なエンコーダーオプションを設定し、それを IWICBitmapFrameEncode::Initialize に渡します。
エンコーダーオプションの設定例については、Encoding Overview を参照してください。
複数フレームのエンコードをサポートする形式 (TIFF、JPEG-XR など) では、一度に 1 つのフレームのみを処理できます。つまり、CreateNewFrame を再度呼び出す前に IWICBitmapFrameEncode::Commit を呼び出す必要があります。
画像のすべての変更をコミットし、ストリームを閉じます。
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
画像を確定するには、フレームの Commit とエンコーダーの Commit の両方を呼び出す必要があります。ただし、エンコーダーの Commit メソッドは、すべてのフレームがコミットされた後にのみ呼び出してください。
エンコーダーがコミットされた後は、再初期化したり別のストリームで再利用したりすることはできません。たとえば IWICImagingFactory::CreateEncoder を使用して、新しいエンコーダーインターフェイスを作成する必要があります。
エンコーダーの Commit を成功させるには、少なくとも IWICBitmapEncoder::Initialize と、IWICBitmapFrameEncode::WriteSource または IWICBitmapFrameEncode::WritePixels のいずれかを呼び出す必要があります。
IWICBitmapFrameEncode::WriteSource は、画像データのエンコードに必要なすべてのパラメーターを指定します。IWICBitmapFrameEncode::WritePixels の場合は、IWICBitmapFrameEncode::SetSize、IWICBitmapFrameEncode::SetPixelFormat、および (ピクセル形式がインデックス付きの場合は) IWICBitmapFrameEncode::SetPalette も呼び出す必要があります。
エンコーダーのメタデータクエリライターを取得します。
| ppIMetadataQueryWriter | IWICMetadataQueryWriter** | out | このメソッドが返されると、エンコーダーのメタデータクエリライターへのポインターが格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWICBitmapEncoder "{00000103-A8F2-4877-BA0A-FD2B6645FB94}" #usecom global IWICBitmapEncoder IID_IWICBitmapEncoder "{}" #comfunc global IWICBitmapEncoder_Initialize 3 sptr,int #comfunc global IWICBitmapEncoder_GetContainerFormat 4 var #comfunc global IWICBitmapEncoder_GetEncoderInfo 5 sptr #comfunc global IWICBitmapEncoder_SetColorContexts 6 int,sptr #comfunc global IWICBitmapEncoder_SetPalette 7 sptr #comfunc global IWICBitmapEncoder_SetThumbnail 8 sptr #comfunc global IWICBitmapEncoder_SetPreview 9 sptr #comfunc global IWICBitmapEncoder_CreateNewFrame 10 sptr,sptr #comfunc global IWICBitmapEncoder_Commit 11 #comfunc global IWICBitmapEncoder_GetMetadataQueryWriter 12 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IWICBitmapEncoder "{00000103-A8F2-4877-BA0A-FD2B6645FB94}" #usecom global IWICBitmapEncoder IID_IWICBitmapEncoder "{}" #comfunc global IWICBitmapEncoder_Initialize 3 sptr,int #comfunc global IWICBitmapEncoder_GetContainerFormat 4 sptr #comfunc global IWICBitmapEncoder_GetEncoderInfo 5 sptr #comfunc global IWICBitmapEncoder_SetColorContexts 6 int,sptr #comfunc global IWICBitmapEncoder_SetPalette 7 sptr #comfunc global IWICBitmapEncoder_SetThumbnail 8 sptr #comfunc global IWICBitmapEncoder_SetPreview 9 sptr #comfunc global IWICBitmapEncoder_CreateNewFrame 10 sptr,sptr #comfunc global IWICBitmapEncoder_Commit 11 #comfunc global IWICBitmapEncoder_GetMetadataQueryWriter 12 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。