IWICPlanarBitmapSourceTransform
COM公式ドキュメント
ピクセル成分が個別の成分プレーンに格納されるプレーナ Y'CbCr ピクセル形式へのアクセスを提供します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
目的のプレーナ出力がサポートされているかどうかを判定し、サポートされている場合に呼び出し元が最適化されたコードパスを選択できるようにするには、このメソッドを使用します。
| puiWidth | DWORD* | inout | 入力時は目的の幅。出力時は目的の幅に最も近いサポート対象の幅で、目的の幅と同じかそれより大きくなります。 |
| puiHeight | DWORD* | inout | 入力時は目的の高さ。出力時は目的の高さに最も近いサポート対象の高さで、目的の幅と同じかそれより大きくなります。 |
| dstTransform | WICBitmapTransformOptions | in | 目的の回転または反転操作。このフラグパラメーターでは複数の WICBitmapTransformOptions を組み合わせることができます。WICBitmapTransformOptions を参照してください。 |
| dstPlanarOptions | WICPlanarOptions | in | 変換に対する追加の構成オプションを指定するために使用します。詳細については WICPlanarOptions を参照してください。 WIC JPEG デコーダー: 縮小時にサブサンプリング比率を維持するために WICPlanarOptionsPreserveSubsampling を指定できます。既定では、JPEG デコーダーは場合によって Y プレーンのみを縮小することで品質を維持しようとし、画像を 4:4:4 クロマサブサンプリングに変更します。 |
| pguidDstFormats | GUID* | in | 各プレーンに要求されるピクセル形式。 |
| pPlaneDescriptions | WICBitmapPlaneDescription* | out | *pfIsSupported == TRUE の場合、プレーン記述の配列には各プレーンのサイズと形式が格納されます。 WIC JPEG デコーダー: クロマサブサンプリングにより、Cb プレーンおよび Cr プレーンのサイズは puiWidth および puiHeight が返す値と異なる場合があります。 |
| cPlanes | DWORD | in | 要求される成分プレーンの数。 |
| pfIsSupported | BOOL* | out | 要求された変換がネイティブにサポートされている場合は TRUE に設定されます。 |
戻り値
種類: HRESULT
pfIsSupported の値を確認して、IWICPlanarBitmapSourceTransform::CopyPixels を介して変換がサポートされているかどうかを判定します。このメソッドが失敗した場合、幅、高さ、およびプレーン記述の出力パラメーターはゼロで初期化されます。 その他の戻り値は失敗を示します。
ピクセルを宛先プレーンにコピーします。指定された入力パラメーターによって構成されます。
| prcSource | WICRect* | in | コピーするピクセルのソース矩形。 |
| uiWidth | DWORD | in | ソースビットマップをスケーリングする幅。このパラメーターは IWICPlanarBitmapSourceTransform:: DoesSupportTransform を通じて取得可能な値と等しくなければなりません。 |
| uiHeight | DWORD | in | ソースビットマップをスケーリングする高さ。このパラメーターは IWICPlanarBitmapSourceTransform:: DoesSupportTransform を通じて取得可能な値と等しくなければなりません。 |
| dstTransform | WICBitmapTransformOptions | in | ピクセルコピーの前に実行する目的の回転または反転。回転は水平反転または垂直反転と組み合わせることができます。WICBitmapTransformOptions を参照してください。 |
| dstPlanarOptions | WICPlanarOptions | in | 変換に対する追加の構成オプションを指定するために使用します。詳細については WICPlanarOptions を参照してください。 WIC JPEG デコーダー: 縮小時にサブサンプリング比率を維持するために WICPlanarOptionsPreserveSubsampling を指定できます。既定では、JPEG デコーダーは場合によって Y プレーンのみを縮小することで品質を維持しようとし、画像を 4:4:4 クロマサブサンプリングに変更します。 |
| pDstPlanes | WICBitmapPlane* | in | 各成分プレーンのピクセル形式と出力バッファーを指定します。プレーンの数と各プレーンのピクセル形式は IWICPlanarBitmapSourceTransform::DoesSupportTransform を通じて取得可能な値と一致しなければなりません。 |
| cPlanes | DWORD | in | pDstPlanes パラメーターで指定された成分プレーンの数。 |
戻り値
種類: HRESULT
指定されたスケール、反転/回転、およびプレーナ形式の構成がサポートされていない場合、このメソッドは WINCODEC_ERR_INVALIDPARAMETER で失敗します。変換がサポートされているかどうかは IWICPlanarBitmapSourceTransform::DoesSupportTransform を呼び出して確認できます。
解説(Remarks)
WIC JPEG デコーダー: 画像に構成されたクロマサブサンプリングに応じて、ソース矩形には次の制約があります。
| クロマサブサンプリング | X 座標 | Y 座標 | クロマ幅 | クロマ高さ |
|---|---|---|---|---|
| 4:2:0 | 2 の倍数 | 2 の倍数 | lumaWidth / 2 を最も近い整数に切り上げた値。 | lumaHeight / 2 を最も近い整数に切り上げた値。 |
| 4:2:2 | 2 の倍数 | 任意 | lumaWidth / 2 を最も近い整数に切り上げた値。 | lumaHeight |
| 4:4:4 | 任意 | 任意 | llumaWidth | llumaHeight |
| 4:4:0 | 任意 | 2 の倍数 | lumaWidth | llumaHeight / 2 を最も近い整数に切り上げた値。 |
pDstPlanes パラメーターは次のピクセル形式をサポートします。
| プレーン数 | プレーン 1 | プレーン 2 | プレーン 3 |
|---|---|---|---|
| 3 | GUID_WICPixelFormat8bppY | GUID_WICPixelFormat8bppCb | GUID_WICPixelFormat8bppCr |
| 2 | GUID_WICPixelFormat8bppY | GUID_WICPixelFormat16bppCbCr | N/A |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWICPlanarBitmapSourceTransform "{3AFF9CCE-BE95-4303-B927-E7D16FF4A613}" #usecom global IWICPlanarBitmapSourceTransform IID_IWICPlanarBitmapSourceTransform "{}" #comfunc global IWICPlanarBitmapSourceTransform_DoesSupportTransform 3 var,var,int,int,var,var,int,var #comfunc global IWICPlanarBitmapSourceTransform_CopyPixels 4 var,int,int,int,int,var,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IWICPlanarBitmapSourceTransform "{3AFF9CCE-BE95-4303-B927-E7D16FF4A613}" #usecom global IWICPlanarBitmapSourceTransform IID_IWICPlanarBitmapSourceTransform "{}" #comfunc global IWICPlanarBitmapSourceTransform_DoesSupportTransform 3 sptr,sptr,int,int,sptr,sptr,int,sptr #comfunc global IWICPlanarBitmapSourceTransform_CopyPixels 4 sptr,int,int,int,int,sptr,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。