IWICBitmapFrameEncode
COM公式ドキュメント
エンコーダーの個々の画像フレームを表します。
メソッド 11
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定されたプロパティを使用してフレームエンコーダーを初期化します。
| pIEncoderOptions | IPropertyBag2* | in | IWICBitmapFrameEncode の初期化に使用するプロパティのセット。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
エンコードオプションが不要な場合は、pIEncoderOptions に NULL を渡します。それ以外の場合は、IWICBitmapEncoder::CreateNewFrame によって提供された IPropertyBag2 に更新した値を設定して渡します。
Windows 提供のコーデックがサポートするエンコードオプションの一覧については、Native WIC Codecs を参照してください。
フレームの出力画像の寸法を設定します。
| uiWidth | DWORD | in | 出力画像の幅。 |
| uiHeight | DWORD | in | 出力画像の高さ。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
出力画像の物理的な解像度を設定します。
| dpiX | DOUBLE | in | 水平方向の解像度の値。 |
| dpiY | DOUBLE | in | 垂直方向の解像度の値。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
Windows Imaging Component (WIC) は、DPI 解像度の値に対して特別な処理を行いません。たとえば、IWICBitmapSource::CopyPixels から返されるデータは DPI によってスケーリングされません。DPI 解像度はアプリケーションが処理する必要があります。
エンコーダーに対して、指定されたピクセルフォーマットの使用を要求します。
| pPixelFormat | GUID* | inout | 入力時は、要求するピクセルフォーマット GUID。出力時は、エンコーダーがサポートする最も近いピクセルフォーマット GUID であり、要求したフォーマットと異なる場合があります。ピクセルフォーマット GUID の一覧については、Native Pixel Formats を参照してください。 |
戻り値
Type: HRESULT
返される可能性のある値には次のものがあります。
| Return code | Description |
|---|---|
| 成功しました。 | |
| IWICBitmapFrameEncode::Initialize メソッドが呼び出されていません。 |
解説(Remarks)
エンコーダーが要求されたピクセルフォーマットをサポートしていない場合があります。サポートしていない場合、SetPixelFormat は pPixelFormat が指すメモリブロックに最も近い一致を返します。返されたピクセルフォーマットが要求したフォーマットと一致しない場合は、IWICFormatConverter オブジェクトを使用してピクセルデータを変換する必要があります。
指定された数の IWICColorContext プロファイルをフレームに設定します。
| cCount | DWORD | in | 設定する IWICColorContext プロファイルの数。 |
| ppIColorContext | IWICColorContext** | in | フレームに設定するカラーコンテキストプロファイルを含む IWICColorContext ポインターへのポインター。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
- BMPカラーコンテキストの設定はサポートされていません。この関数は WINCODEC_ERR_UNSUPPORTEDOPERATION を返します。
- PNG設定できるカラーコンテキストは最大 1 つで、追加のカラーコンテキストは無視されます。このコンテキストは WICColorContextProfile でなければならず、PNG ファイル内の iCCP、gAMA、cHRM チャンクのエンコードに使用されます。
- JPEG、TIFF、JPEG-XR最大 1 つの WICColorContextProfile と 1 つの WICColorContextExifColorSpace の設定がサポートされます。各種類のカラーコンテキストは 1 つより多く指定してはなりません。各種類の最後のコンテキストを除いてすべて無視されるためです。JPEG では、WICColorContextProfile は JPEG APP2 ICC メタデータブロックにエンコードされます。
TIFF および JPEG-XR では、WICColorContextProfile は IFD ICC プロファイルメタデータブロック (IFD タグ 0x8773) にエンコードされます。3 つのフォーマットすべてにおいて、WICColorContextExifColorSpace は EXIF カラースペースメタデータブロック (EXIF タグ 0xA001) にエンコードされます。
インデックス付きピクセルフォーマット用に IWICPalette を設定します。
| pIPalette | IWICPalette* | in | インデックス付きピクセルフォーマットに使用する IWICPalette。 エンコーダーは、サポートするピクセルフォーマットを反映するためにパレットを変更する場合があります。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、ピクセルフォーマットがインデックス付きでないフォーマットに設定されているフレームに対して呼び出しても失敗しません。ターゲットのピクセルフォーマットがインデックス付きでないフォーマットの場合、パレットは無視されます。
すでに IWICBitmapEncoder::SetPalette を呼び出してグローバルパレットを設定している場合、このメソッドは現在のフレームに対してそのパレットを上書きします。
パレットは、WritePixels/WriteSource を最初に呼び出す前に指定する必要があります。そうすることで、WriteSource はソース画像をエンコーダーのピクセルフォーマットに変換する際に、指定されたパレットを使用します。パレットが指定されていない場合、WriteSource の最初の呼び出し時にパレットが生成されます。
コーデックがサポートしている場合、フレームのサムネイルを設定します。
| pIThumbnail | IWICBitmapSource* | in | サムネイルとして使用するビットマップソース。 |
戻り値
Type: HRESULT
成功した場合は S_OK を、それ以外の場合はエラー値を返します。
この機能がエンコーダーでサポートされていない場合は WINCODEC_ERR_UNSUPPORTEDOPERATION を返します。
解説(Remarks)
SetThumbnail は、WritePixels または WriteSource を呼び出す前に呼び出すことをお勧めします。 WritePixels または WriteSource の呼び出し後に SetThumbnail を呼び出した場合、サムネイルはエンコードされたファイルに追加されません。
- BMP、PNGサムネイルの設定はサポートされていません。この関数は WINCODEC_ERR_UNSUPPORTEDOPERATION を返します。
- JPEGサムネイルの設定がサポートされます。ソース画像は 8bpp または 24bpp の JPEG として再エンコードされ、JPEG の APP1 メタデータブロックに書き込まれます。
- TIFF サムネイルの設定がサポートされます。ソース画像は TIFF として再エンコードされ、フレームの SubIFD ブロックに書き込まれます。
- JPEG-XRサムネイルの設定がサポートされます。ソース画像は追加の 8bpp または 24bpp フレームとして再エンコードされます。
呼び出し元が提供したバッファーから IWICBitmapFrameEncode オブジェクトにスキャンラインデータをコピーします。
| lineCount | DWORD | in | エンコードするラインの数。 |
| cbStride | DWORD | in | 画像ピクセルのストライド。 |
| cbBufferSize | DWORD | in | ピクセルバッファーのサイズ。 |
| pbPixels | BYTE* | in | ピクセルバッファーへのポインター。 |
戻り値
Type: HRESULT
返される可能性のある値には次のものがあります。
| Return code | Description |
|---|---|
| 成功しました。 | |
| lineCount の値が画像内のスキャンラインの数を超えています。 |
解説(Remarks)
連続する WritePixels の呼び出しは、出力画像における順次的なスキャンラインアクセスであると想定されます。
ビットマップソースをエンコードします。
| pIBitmapSource | IWICBitmapSource* | in | エンコードするビットマップソース。 |
| prc | WICRect* | in | ビットマップソースのサイズを示す矩形。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
WriteSource を呼び出す前に SetSize が呼び出されていない場合、prc が NULL でなければ、そこで指定されたサイズが使用されます。それ以外の場合は、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 の幅を超える場合、右側の余分なピクセルは無視されます。ソース矩形の高さが残りの未充填の高さを超える場合、下部の余分なスキャンラインは無視されます。
フレームを画像にコミットします。
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
フレームの Commit を呼び出した後は、IWICBitmapFrameEncode オブジェクトおよびそれから作成されたオブジェクトを使用または再初期化することはできません。
画像を確定するには、フレームの Commit とエンコーダーの Commit の両方を呼び出す必要があります。ただし、エンコーダーの Commit メソッドは、すべてのフレームがコミットされた後にのみ呼び出してください。
エンコーダーフレームのメタデータクエリライターを取得します。
| ppIMetadataQueryWriter | IWICMetadataQueryWriter** | out | このメソッドが返されたとき、エンコーダーフレームのメタデータクエリライターへのポインターが格納されます。 |
戻り値
Type: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
フレームにメタデータを設定する場合は、IWICBitmapFrameEncode::WritePixels または IWICBitmapFrameEncode::WriteSource を使用してフレームに画像ピクセルを書き込む前に行う必要があります。
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 指定が可能。#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 sptr #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,sptr #comfunc global IWICBitmapFrameEncode_WriteSource 11 sptr,sptr #comfunc global IWICBitmapFrameEncode_Commit 12 #comfunc global IWICBitmapFrameEncode_GetMetadataQueryWriter 13 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。