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

IWICPlanarBitmapFrameEncode

COM
IIDf928b7b8-2221-40c1-b72e-7e82f1974d1a継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

プレーナー成分の画像ピクセルをエンコーダーに書き込めるようにします。

解説(Remarks)

IWICPlanarBitmapFrameEncode を使用した YCbCr データのエンコードは、IWICBitmapFrameEncode を使用したインターリーブ データのエンコードと似ていますが、同一ではありません。このプレーナー インターフェイスはプレーナー フレーム画像データの書き込み機能のみを公開しており、メタデータやサムネイルの設定、および処理の最後のコミットには引き続きフレーム エンコード インターフェイスを使用してください。

メソッド 2

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

vtbl 3 HRESULT WritePixels(DWORD lineCount, WICBitmapPlane* pPlanes, DWORD cPlanes)

ソース プレーンから複数のラインをエンコード形式に書き込みます。(IWICPlanarBitmapFrameEncode.WritePixels)

lineCountDWORDinエンコードするライン数。WIC Jpeg 固有のライン数の制限については、「解説」セクションを参照してください。
pPlanesWICBitmapPlane*inエンコードされる各成分プレーンのソース バッファーを指定します。
cPlanesDWORDinpPlanes パラメーターで指定された成分プレーンの数。

戻り値

型: HRESULT

プレーンとソース矩形が要件を満たさない場合、このメソッドは WINCODEC_ERR_IMAGESIZEOUTOFRANGE で失敗します。

IWICBitmapSource の形式がエンコーダーの要件を満たさない場合、このメソッドは WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT で失敗します。

解説(Remarks)

連続する WritePixels の呼び出しは、出力画像にスキャンラインを順次追加するものと見なされます。このメソッドの前に IWICBitmapFrameEncode::InitializeIWICBitmapFrameEncode::SetSize、および IWICBitmapFrameEncode::SetPixelFormat を呼び出す必要があり、そうでない場合は失敗します。

IWICBitmapFrameEncode::SetPixelFormat で設定されたインターリーブ ピクセル形式と、コーデック固有のエンコード パラメーターによって、サポートされるプレーナー形式が決まります。

WIC JPEG エンコーダー: QueryInterface を使用して、WIC JPEG の IWICBitmapFrameEncode 実装からこのインターフェイスを取得できます。このメソッドを使用して WIC JPEG エンコーダーで Y’CbCr データをエンコードする場合、フレーム作成時にエンコーダー オプションでクロマ サブサンプリングを構成できます。詳細については、エンコードの概要および IWICBitmapEncoder::CreateNewFrame を参照してください。

構成されたクロマ サブサンプリングに応じて、lineCount パラメーターには次の制限があります。

クロマ サブサンプリング ライン数の制限 クロマ プレーンの幅 クロマ プレーンの高さ
4:2:0 呼び出しが画像の最後のスキャンラインを含む場合を除き、2 の倍数 lumaWidth / 2 を最も近い整数に切り上げた値。 lumaHeight / 2 を最も近い整数に切り上げた値。
4:2:2 任意 lumaWidth / 2 を最も近い整数に切り上げた値。 任意
4:4:4 任意 任意 任意
4:4:0 呼び出しが画像の最後のスキャンラインを含む場合を除き、2 の倍数 任意 llumaHeight / 2 を最も近い整数に切り上げた値。

スキャンラインの全幅をエンコードする必要があり、ビットマップ ソースの幅はそのプレーナー構成と一致している必要があります。

さらに、IWICBitmapFrameEncode::SetPixelFormat でピクセル形式が設定されている場合、それは GUID_WICPixelFormat24bppBGR でなければなりません。

このメソッドに渡されるビットマップ ソースでサポートされるピクセル形式は次のとおりです。

プレーン数 プレーン 1 プレーン 2 プレーン 3
3 GUID_WICPixelFormat8bppY GUID_WICPixelFormat8bppCb GUID_WICPixelFormat8bppCr
2 GUID_WICPixelFormat8bppY GUID_WICPixelFormat16bppCbCr N/A
vtbl 4 HRESULT WriteSource(IWICBitmapSource** ppPlanes, DWORD cPlanes, WICRect* prcSource)

ソース プレーンから複数のラインをエンコード形式に書き込みます。(IWICPlanarBitmapFrameEncode.WriteSource)

ppPlanesIWICBitmapSource**in画像プレーンを表す IWICBitmapSource の配列を指定します。
cPlanesDWORDinplanes パラメーターで指定された成分プレーンの数。
prcSourceWICRect*inIWICBitmapSource プレーンからエンコードするピクセルのソース矩形。Null はソース全体を示します。ソース矩形の幅は SetSize で設定した幅と一致している必要があります。累積されたソース矩形の高さの合計が SetSize で設定した値と同じである限り、WriteSource を繰り返し呼び出すことができます。

戻り値

型: HRESULT

プレーンとソース矩形が要件を満たさない場合、このメソッドは WINCODEC_ERR_IMAGESIZEOUTOFRANGE で失敗します。

IWICBitmapSource の形式がエンコーダーの要件を満たさない場合、このメソッドは WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT で失敗します。

解説(Remarks)

連続する WriteSource の呼び出しは、出力画像にスキャンラインを順次追加するものと見なされます。このメソッドの前に IWICBitmapFrameEncode::InitializeIWICBitmapFrameEncode::SetSize、および IWICBitmapFrameEncode::SetPixelFormat を呼び出す必要があり、そうでない場合は失敗します。

IWICBitmapFrameEncode::SetPixelFormat で設定されたインターリーブ ピクセル形式と、コーデック固有のエンコード パラメーターによって、サポートされるプレーナー形式が決まります。

WIC JPEG エンコーダー: QueryInterface を使用して、WIC JPEG の IWICBitmapFrameEncode 実装からこのインターフェイスを取得できます。このメソッドを使用して WIC JPEG エンコーダーで Y’CbCr データをエンコードする場合、フレーム作成時にエンコーダー オプションでクロマ サブサンプリングを構成できます。詳細については、エンコードの概要および IWICBitmapEncoder::CreateNewFrame を参照してください。

構成されたクロマ サブサンプリングに応じて、lineCount パラメーターには次の制限があります。

クロマ サブサンプリング X 座標 Y 座標 クロマ幅 クロマ高さ
4:2:0 2 の倍数 2 の倍数 lumaWidth / 2 を最も近い整数に切り上げた値。 lumaHeight / 2 を最も近い整数に切り上げた値。
4:2:2 2 の倍数 任意 lumaWidth / 2 を最も近い整数に切り上げた値。 任意
4:4:4 任意 任意 任意 任意
4:4:0 任意 2 の倍数 lumaWidth llumaHeight / 2 を最も近い整数に切り上げた値。

スキャンラインの全幅をエンコードする必要があり、ビットマップ ソースの幅はそのプレーナー構成と一致している必要があります。

さらに、IWICBitmapFrameEncode::SetPixelFormat でピクセル形式が設定されている場合、それは GUID_WICPixelFormat24bppBGR でなければなりません。

このメソッドに渡されるビットマップ ソースでサポートされるピクセル形式は次のとおりです。

プレーン数 プレーン 1 プレーン 2 プレーン 3
3 GUID_WICPixelFormat8bppY GUID_WICPixelFormat8bppCb GUID_WICPixelFormat8bppCr
2 GUID_WICPixelFormat8bppY GUID_WICPixelFormat16bppCbCr N/A
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IWICPlanarBitmapFrameEncode "{F928B7B8-2221-40C1-B72E-7E82F1974D1A}"
#usecom global IWICPlanarBitmapFrameEncode IID_IWICPlanarBitmapFrameEncode "{}"
#comfunc global IWICPlanarBitmapFrameEncode_WritePixels  3 int,var,int
#comfunc global IWICPlanarBitmapFrameEncode_WriteSource  4 sptr,int,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。