IWICJpegFrameEncode
COM公式ドキュメント
圧縮された JPEG スキャンデータを WIC エンコーダーの出力ストリームに直接書き込むためのメソッドを公開します。また、Huffman テーブルおよび量子化テーブルへのアクセスも提供します。
解説(Remarks)
このインターフェイスは、JPEG エンコーダー用に Windows が提供する IWICBitmapFrameEncoder インターフェイスに対して IUnknown::QueryInterface を呼び出すことで取得します。
WIC JPEG エンコーダーがサポートする JPEG 機能は、デコーダーよりも小さなサブセットに限られます。
- エンコーダーは単一のスキャンに限定されます。プログレッシブエンコードやプレーナーコンポーネントデータのいずれについても、マルチスキャン画像のエンコードはサポートされません。
- エンコーダーは、2 つの量子化テーブル、2 つの AC Huffman テーブル、および 2 つの DC Huffman テーブルをサポートします。luma テーブルは Y チャネルに使用され、YCCK の場合は black チャネルにも使用されます。chroma テーブルは CbCr チャネルに使用されます。
- エンコーダーは、gray、YCbCr (RGB)、および YCCK (CMYK) のエンコードをサポートします。
- エンコーダーは、4:2:0、4:2:2、4:4:0、4:4:4 の 4 つの固定コンポーネントサブサンプリングをサポートします。これは chroma のみをサブサンプリングします。
- エンコーダーはリスタートマーカーをサポートしません。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定されたスキャンおよびテーブルの AC Huffman テーブルのコピーを取得します。(IWICJpegFrameEncode.GetAcHuffmanTable)
| scanIndex | DWORD | in | データを取得するスキャンの、0 から始まるインデックス。 |
| tableIndex | DWORD | in | 取得する AC Huffman テーブルのインデックス。 |
| pAcHuffmanTable | DXGI_JPEG_AC_HUFFMAN_TABLE* | out | テーブルデータを受け取るポインター。このパラメーターは NULL であってはなりません。 |
戻り値
型: HRESULT
このメソッドは、次のいずれかの値を返すことがあります。
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| 指定されたスキャンインデックスが無効です。 | |
| pAcHuffmanTable が NULL の場合、または tableIndex が有効なテーブルスロットを指していない場合に発生することがあります。有効なテーブルインデックスについてはスキャンヘッダーを確認してください。 |
指定されたスキャンおよびテーブルの DC Huffman テーブルのコピーを取得します。(IWICJpegFrameEncode.GetDcHuffmanTable)
| scanIndex | DWORD | in | データを取得するスキャンの、0 から始まるインデックス。 |
| tableIndex | DWORD | in | 取得する DC Huffman テーブルのインデックス。 |
| pDcHuffmanTable | DXGI_JPEG_DC_HUFFMAN_TABLE* | out | テーブルデータを受け取るポインター。このパラメーターは NULL であってはなりません。 |
戻り値
このメソッドは、次のいずれかの値を返すことがあります。
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| 指定されたスキャンインデックスが無効です。 | |
| pTable が NULL の場合、または tableIndex が有効なテーブルスロットを指していない場合に発生することがあります。有効なテーブルインデックスについてはスキャンヘッダーを確認してください。 |
量子化テーブルのコピーを取得します。(IWICJpegFrameEncode.GetQuantizationTable)
| scanIndex | DWORD | in | データを取得するスキャンの、0 から始まるインデックス。 |
| tableIndex | DWORD | in | 取得する量子化テーブルのインデックス。 |
| pQuantizationTable | DXGI_JPEG_QUANTIZATION_TABLE* | out | テーブルデータを受け取るポインター。このパラメーターは NULL であってはなりません。 |
戻り値
型: HRESULT
このメソッドは、次のいずれかの値を返すことがあります。
| 戻り値 | 説明 |
|---|---|
| 操作は成功しました。 | |
| 指定されたスキャンインデックスが無効です。 | |
| pTable が NULL の場合、または tableIndex が有効なテーブルスロットを指していない場合に発生することがあります。有効なテーブルインデックスについてはスキャンヘッダーを確認してください。 |
スキャンデータを JPEG フレームに書き込みます。
| cbScanData | DWORD | in | pbScanData パラメーター内のデータのサイズ。 |
| pbScanData | BYTE* | in | 書き込むスキャンデータ。 |
戻り値
解説(Remarks)
WriteScan は複数回呼び出すことができます。各呼び出しは、指定されたスキャンデータを以前のスキャンデータに追記します。スキャンを完了するには、IWICBitmapFrameEncode::Commit を呼び出します。
結果として得られる JPEG ファイル内でスキャンデータより前に配置される、エンコーダーパラメーターまたは画像メタデータを設定する呼び出しはすべて、このメソッドの最初の呼び出しより前に完了しておく必要があります。これには、IWICBitmapFrameEncode::SetColorContexts、IWICBitmapFrameEncode::SetPalette、IWICBitmapFrameEncode::SetPixelFormat、IWICBitmapFrameEncode::SetResolution、および IWICBitmapFrameEncode::SetThumbnail の呼び出しが含まれます。IWICBitmapFrameEncode::SetSize は、エンコード画像サイズの既定値を持たないため必須です。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWICJpegFrameEncode "{2F0C601F-D2C6-468C-ABFA-49495D983ED1}" #usecom global IWICJpegFrameEncode IID_IWICJpegFrameEncode "{}" #comfunc global IWICJpegFrameEncode_GetAcHuffmanTable 3 int,int,var #comfunc global IWICJpegFrameEncode_GetDcHuffmanTable 4 int,int,var #comfunc global IWICJpegFrameEncode_GetQuantizationTable 5 int,int,var #comfunc global IWICJpegFrameEncode_WriteScan 6 int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IWICJpegFrameEncode "{2F0C601F-D2C6-468C-ABFA-49495D983ED1}" #usecom global IWICJpegFrameEncode IID_IWICJpegFrameEncode "{}" #comfunc global IWICJpegFrameEncode_GetAcHuffmanTable 3 int,int,sptr #comfunc global IWICJpegFrameEncode_GetDcHuffmanTable 4 int,int,sptr #comfunc global IWICJpegFrameEncode_GetQuantizationTable 5 int,int,sptr #comfunc global IWICJpegFrameEncode_WriteScan 6 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。