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

IWICBitmapFrameEncode

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

公式ドキュメント

エンコーダーの個々の画像フレームを表します。

メソッド 11

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

vtbl 3 HRESULT Initialize(IPropertyBag2* pIEncoderOptions)

指定されたプロパティを使用してフレームエンコーダーを初期化します。

pIEncoderOptionsIPropertyBag2*inIWICBitmapFrameEncode の初期化に使用するプロパティのセット。

戻り値

Type: HRESULT

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

解説(Remarks)

エンコードオプションが不要な場合は、pIEncoderOptionsNULL を渡します。それ以外の場合は、IWICBitmapEncoder::CreateNewFrame によって提供された IPropertyBag2 に更新した値を設定して渡します。

Windows 提供のコーデックがサポートするエンコードオプションの一覧については、Native WIC Codecs を参照してください。

vtbl 4 HRESULT SetSize(DWORD uiWidth, DWORD uiHeight)

フレームの出力画像の寸法を設定します。

uiWidthDWORDin出力画像の幅。
uiHeightDWORDin出力画像の高さ。

戻り値

Type: HRESULT

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

vtbl 5 HRESULT SetResolution(DOUBLE dpiX, DOUBLE dpiY)

出力画像の物理的な解像度を設定します。

dpiXDOUBLEin水平方向の解像度の値。
dpiYDOUBLEin垂直方向の解像度の値。

戻り値

Type: HRESULT

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

解説(Remarks)

Windows Imaging Component (WIC) は、DPI 解像度の値に対して特別な処理を行いません。たとえば、IWICBitmapSource::CopyPixels から返されるデータは DPI によってスケーリングされません。DPI 解像度はアプリケーションが処理する必要があります。

vtbl 6 HRESULT SetPixelFormat(GUID* pPixelFormat)

エンコーダーに対して、指定されたピクセルフォーマットの使用を要求します。

pPixelFormatGUID*inout入力時は、要求するピクセルフォーマット GUID。出力時は、エンコーダーがサポートする最も近いピクセルフォーマット GUID であり、要求したフォーマットと異なる場合があります。ピクセルフォーマット GUID の一覧については、Native Pixel Formats を参照してください。

戻り値

Type: HRESULT

返される可能性のある値には次のものがあります。

Return code Description
S_OK
成功しました。
WINCODEC_ERR_WRONGSTATE
IWICBitmapFrameEncode::Initialize メソッドが呼び出されていません。

解説(Remarks)

エンコーダーが要求されたピクセルフォーマットをサポートしていない場合があります。サポートしていない場合、SetPixelFormatpPixelFormat が指すメモリブロックに最も近い一致を返します。返されたピクセルフォーマットが要求したフォーマットと一致しない場合は、IWICFormatConverter オブジェクトを使用してピクセルデータを変換する必要があります。

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

指定された数の IWICColorContext プロファイルをフレームに設定します。

cCountDWORDin設定する IWICColorContext プロファイルの数。
ppIColorContextIWICColorContext**inフレームに設定するカラーコンテキストプロファイルを含む IWICColorContext ポインターへのポインター。

戻り値

Type: HRESULT

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

解説(Remarks)

vtbl 8 HRESULT SetPalette(IWICPalette* pIPalette)

インデックス付きピクセルフォーマット用に IWICPalette を設定します。

pIPaletteIWICPalette*in

インデックス付きピクセルフォーマットに使用する IWICPalette

エンコーダーは、サポートするピクセルフォーマットを反映するためにパレットを変更する場合があります。

戻り値

Type: HRESULT

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

解説(Remarks)

このメソッドは、ピクセルフォーマットがインデックス付きでないフォーマットに設定されているフレームに対して呼び出しても失敗しません。ターゲットのピクセルフォーマットがインデックス付きでないフォーマットの場合、パレットは無視されます。

すでに IWICBitmapEncoder::SetPalette を呼び出してグローバルパレットを設定している場合、このメソッドは現在のフレームに対してそのパレットを上書きします。

パレットは、WritePixels/WriteSource を最初に呼び出す前に指定する必要があります。そうすることで、WriteSource はソース画像をエンコーダーのピクセルフォーマットに変換する際に、指定されたパレットを使用します。パレットが指定されていない場合、WriteSource の最初の呼び出し時にパレットが生成されます。

vtbl 9 HRESULT SetThumbnail(IWICBitmapSource* pIThumbnail)

コーデックがサポートしている場合、フレームのサムネイルを設定します。

pIThumbnailIWICBitmapSource*inサムネイルとして使用するビットマップソース。

戻り値

Type: HRESULT

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

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

解説(Remarks)

SetThumbnail は、WritePixels または WriteSource を呼び出す前に呼び出すことをお勧めします。 WritePixels または WriteSource の呼び出し後に SetThumbnail を呼び出した場合、サムネイルはエンコードされたファイルに追加されません。

vtbl 10 HRESULT WritePixels(DWORD lineCount, DWORD cbStride, DWORD cbBufferSize, BYTE* pbPixels)

呼び出し元が提供したバッファーから IWICBitmapFrameEncode オブジェクトにスキャンラインデータをコピーします。

lineCountDWORDinエンコードするラインの数。
cbStrideDWORDin画像ピクセルのストライド。
cbBufferSizeDWORDinピクセルバッファーのサイズ。
pbPixelsBYTE*inピクセルバッファーへのポインター。

戻り値

Type: HRESULT

返される可能性のある値には次のものがあります。

Return code Description
S_OK
成功しました。
WINCODEC_ERR_CODECTOOMANYSCANLINES
lineCount の値が画像内のスキャンラインの数を超えています。

解説(Remarks)

連続する WritePixels の呼び出しは、出力画像における順次的なスキャンラインアクセスであると想定されます。

vtbl 11 HRESULT WriteSource(IWICBitmapSource* pIBitmapSource, WICRect* prc)

ビットマップソースをエンコードします。

pIBitmapSourceIWICBitmapSource*inエンコードするビットマップソース。
prcWICRect*inビットマップソースのサイズを示す矩形。

戻り値

Type: HRESULT

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

解説(Remarks)

WriteSource を呼び出す前に SetSize が呼び出されていない場合、prcNULL でなければ、そこで指定されたサイズが使用されます。それ以外の場合は、pIBitmapSource で指定された IWICBitmapSource のサイズが使用されます。

WriteSource を呼び出す前に SetPixelFormat が呼び出されていない場合、pIBitmapSource で指定された IWICBitmapSource のピクセルフォーマットが使用されます。

WriteSource を呼び出す前に SetResolution が呼び出されていない場合、pIBitmapSource のピクセルフォーマットが使用されます。

WriteSource を呼び出す前に SetPalette が呼び出されておらず、ターゲットのピクセルフォーマットがインデックス付きで、かつ pIBitmapSource のピクセルフォーマットがエンコーダーフレームのピクセルフォーマットと一致する場合、pIBitmapSource のピクセルフォーマットが使用されます。

GIF 画像をエンコードする際、グローバルパレットが設定されており、フレームレベルのパレットがユーザーまたはカスタムの独立系ソフトウェアベンダー (ISV) の GIF コーデックによって直接設定されていない場合、WriteSource は、pIBitmapSource がフレームレベルのパレットを持っていても、グローバルパレットを使用してフレームをエンコードします。

Windows Vista 以降では、蓄積されたソース矩形の合計の高さが SetSize で設定された高さと同じである限り、WriteSource を繰り返し呼び出すことができます。

Windows 8.1 以降では、ソース矩形は SetSize で設定された寸法以上でなければなりません。ソース矩形の幅が SetSize の幅を超える場合、右側の余分なピクセルは無視されます。ソース矩形の高さが残りの未充填の高さを超える場合、下部の余分なスキャンラインは無視されます。

vtbl 12 HRESULT Commit()

フレームを画像にコミットします。

戻り値

Type: HRESULT

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

解説(Remarks)

フレームの Commit を呼び出した後は、IWICBitmapFrameEncode オブジェクトおよびそれから作成されたオブジェクトを使用または再初期化することはできません。

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

vtbl 13 HRESULT GetMetadataQueryWriter(IWICMetadataQueryWriter** ppIMetadataQueryWriter)

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

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

戻り値

Type: HRESULT

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

解説(Remarks)

フレームにメタデータを設定する場合は、IWICBitmapFrameEncode::WritePixels または IWICBitmapFrameEncode::WriteSource を使用してフレームに画像ピクセルを書き込む前に行う必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IWICBitmapFrameEncode "{00000105-A8F2-4877-BA0A-FD2B6645FB94}"
#usecom global IWICBitmapFrameEncode IID_IWICBitmapFrameEncode "{}"
#comfunc global IWICBitmapFrameEncode_Initialize              3 sptr
#comfunc global IWICBitmapFrameEncode_SetSize                 4 int,int
#comfunc global IWICBitmapFrameEncode_SetResolution           5 double,double
#comfunc global IWICBitmapFrameEncode_SetPixelFormat          6 var
#comfunc global IWICBitmapFrameEncode_SetColorContexts        7 int,sptr
#comfunc global IWICBitmapFrameEncode_SetPalette              8 sptr
#comfunc global IWICBitmapFrameEncode_SetThumbnail            9 sptr
#comfunc global IWICBitmapFrameEncode_WritePixels             10 int,int,int,var
#comfunc global IWICBitmapFrameEncode_WriteSource             11 sptr,var
#comfunc global IWICBitmapFrameEncode_Commit                  12
#comfunc global IWICBitmapFrameEncode_GetMetadataQueryWriter  13 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。