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

IWICBitmapEncoder

COM
IID00000103-a8f2-4877-ba0a-fd2b6645fb94継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

サムネイル、フレーム、パレットなど、エンコーダーのプロパティを設定するためのメソッドを定義します。

解説(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。

vtbl 3 HRESULT Initialize(IStream* pIStream, WICBitmapEncoderCacheOption cacheOption)

エンコーダーを IStream で初期化します。この IStream はビットのエンコード先をエンコーダーに指定します。

pIStreamIStream*in出力ストリーム。
cacheOptionWICBitmapEncoderCacheOptionin初期化時に使用する WICBitmapEncoderCacheOption

戻り値

型: HRESULT

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

vtbl 4 HRESULT GetContainerFormat(GUID* pguidContainerFormat)

エンコーダーのコンテナー形式を取得します。

pguidContainerFormatGUID*outエンコーダーのコンテナー形式 GUID を受け取るポインター。

戻り値

型: HRESULT

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

vtbl 5 HRESULT GetEncoderInfo(IWICBitmapEncoderInfo** ppIEncoderInfo)

エンコーダーの IWICBitmapEncoderInfo を取得します。

ppIEncoderInfoIWICBitmapEncoderInfo**outIWICBitmapEncoderInfo へのポインターを受け取るポインター。

戻り値

型: HRESULT

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

vtbl 6 HRESULT SetColorContexts(DWORD cCount, IWICColorContext** ppIColorContext)

エンコーダーの IWICColorContext オブジェクトを設定します。

cCountDWORDin設定する IWICColorContext の数。
ppIColorContextIWICColorContext**inエンコーダーに設定するカラーコンテキストを含む IWICColorContext ポインターへのポインター。

戻り値

型: HRESULT

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

vtbl 7 HRESULT SetPalette(IWICPalette* pIPalette)

画像のグローバルパレットを設定します。

pIPaletteIWICPalette*inグローバルパレットとして使用する IWICPalette

戻り値

型: HRESULT

成功した場合は S_OK を返します。それ以外の場合はエラー値を返します。

エンコーダーがこの機能をサポートしていない場合は WINCODEC_ERR_UNSUPPORTEDOPERATION を返します。

解説(Remarks)

オプションのグローバルパレットをサポートするのは GIF 画像のみであり、画像にフレームを追加する前にグローバルパレットを設定する必要があります。パレットを設定する必要があるのは、インデックス付きのピクセル形式の場合のみです。

vtbl 8 HRESULT SetThumbnail(IWICBitmapSource* pIThumbnail)

画像のグローバルサムネイルを設定します。

pIThumbnailIWICBitmapSource*inグローバルサムネイルとして設定する IWICBitmapSource

戻り値

型: HRESULT

成功した場合は S_OK を返します。それ以外の場合はエラー値を返します。

エンコーダーがこの機能をサポートしていない場合は WINCODEC_ERR_UNSUPPORTEDOPERATION を返します。

vtbl 9 HRESULT SetPreview(IWICBitmapSource* pIPreview)

画像のグローバルプレビューを設定します。

pIPreviewIWICBitmapSource*inグローバルプレビューとして使用する IWICBitmapSource

戻り値

型: HRESULT

成功した場合は S_OK を返します。それ以外の場合はエラー値を返します。

エンコーダーがこの機能をサポートしていない場合は WINCODEC_ERR_UNSUPPORTEDOPERATION を返します。

vtbl 10 HRESULT CreateNewFrame(IWICBitmapFrameEncode** ppIFrameEncode, IPropertyBag2** ppIEncoderOptions)

新しい IWICBitmapFrameEncode インスタンスを作成します。

ppIFrameEncodeIWICBitmapFrameEncode**out新しい IWICBitmapFrameEncode インスタンスへのポインターを受け取るポインター。
ppIEncoderOptionsIPropertyBag2**inout省略可能。後続のフレーム初期化で使用する名前付きプロパティを受け取ります。「解説」を参照してください。

戻り値

型: HRESULT

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

解説(Remarks)

パラメーター ppIEncoderOptions を使用して、エンコーダーオプションの指定に利用できる IPropertyBag2 を受け取ることができます。これは、ppIEncoderOptionsNULL の IPropertyBag2 ポインターへのポインターを渡すことで行います。返される IPropertyBag2 は、指定した形式で利用可能なすべてのエンコーダーオプションを既定値で初期化した状態になっています。既定以外のエンコード動作を指定するには、IPropertyBag2 に必要なエンコーダーオプションを設定し、それを IWICBitmapFrameEncode::Initialize に渡します。

注意 初期化済みの IPropertyBag2 へのポインターは渡さないでください。そのポインターは上書きされ、元の IPropertyBag2 は解放されません。
エンコーダーオプションを指定するつもりがない場合は、ppIEncoderOptionsNULL を渡すことができます。

エンコーダーオプションの設定例については、Encoding Overview を参照してください。

複数フレームのエンコードをサポートする形式 (TIFF、JPEG-XR など) では、一度に 1 つのフレームのみを処理できます。つまり、CreateNewFrame を再度呼び出す前に IWICBitmapFrameEncode::Commit を呼び出す必要があります。

vtbl 11 HRESULT Commit()

画像のすべての変更をコミットし、ストリームを閉じます。

戻り値

型: HRESULT

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

解説(Remarks)

画像を確定するには、フレームの Commit とエンコーダーの Commit の両方を呼び出す必要があります。ただし、エンコーダーの Commit メソッドは、すべてのフレームがコミットされた後にのみ呼び出してください。

エンコーダーがコミットされた後は、再初期化したり別のストリームで再利用したりすることはできません。たとえば IWICImagingFactory::CreateEncoder を使用して、新しいエンコーダーインターフェイスを作成する必要があります。

エンコーダーの Commit を成功させるには、少なくとも IWICBitmapEncoder::Initialize と、IWICBitmapFrameEncode::WriteSource または IWICBitmapFrameEncode::WritePixels のいずれかを呼び出す必要があります。

IWICBitmapFrameEncode::WriteSource は、画像データのエンコードに必要なすべてのパラメーターを指定します。IWICBitmapFrameEncode::WritePixels の場合は、IWICBitmapFrameEncode::SetSizeIWICBitmapFrameEncode::SetPixelFormat、および (ピクセル形式がインデックス付きの場合は) IWICBitmapFrameEncode::SetPalette も呼び出す必要があります。

vtbl 12 HRESULT GetMetadataQueryWriter(IWICMetadataQueryWriter** ppIMetadataQueryWriter)

エンコーダーのメタデータクエリライターを取得します。

ppIMetadataQueryWriterIWICMetadataQueryWriter**outこのメソッドが返されると、エンコーダーのメタデータクエリライターへのポインターが格納されます。

戻り値

型: 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_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 指定が可能。