IWICDevelopRaw の実装

IWICDevelopRaw

IWICDevelopRaw インターフェイスは、生の画像処理に固有の処理オプションを公開します。 すべての生コーデックで IWICDevelopRaw インターフェイスがサポートされている必要があります。 一部の生コーデックでは、このインターフェイスによって公開されるすべての設定をサポートできない場合がありますが、コーデックで実行できるすべての設定をサポートする必要があります。 少なくとも、すべての生コーデックで SetRotation メソッドと SetRenderMode メソッドを実装する必要があります。

さらに、他のコーデックでは省略可能な一部のメソッドとインターフェイスは、生コーデックに強く推奨されます。 これには、コンテナー レベルのデコーダー クラスの GetPreview メソッドと GetThumbnail メソッド、およびフレーム レベルデコード クラスの IWICBitmapSourceTransform インターフェイスが含まれます。

IWICDevelopRaw メソッドを使用して設定された設定は、他のメタデータの永続化方法と一致する方法でコーデックによって永続化される必要がありますが、元の "As Shot" 設定は上書きしないでください。 メタデータを永続化し、 LoadParameterSetGetCurrentParameterSet を実装することで、生処理アプリケーションがセッション間で処理設定を取得して適用できるようにします。

IWICDevelopRaw インターフェイスのメインの目的は、アプリケーション開発者が、異なるコーデック間で可能な限り一貫して動作する生パラメーターを調整するためのユーザー インターフェイスを構築できるようにすることです。 エンド ユーザーがスライダー コントロールを使用してパラメーターを調整し、その最小値と最大値をパラメーターの最小値と最大値の範囲にマップするとします。 これをサポートするには、すべてのパラメーター範囲を線形として扱うようにあらゆる努力をする必要があります。 スライダー コントロールが過度に機密性が高くないようにするには、パラメーターごとに可能な限り広範な範囲をサポートし、可能な最大範囲の少なくとも 50% をカバーする必要があります。 たとえば、可能な最大コントラスト範囲が純粋グレーから純粋白黒の場合、既定値が 0.0 にマップされている場合、コーデックでサポートされる最小範囲は、既定値とロー エンドの純粋グレー (–1.0) の間の少なくとも中間から、ハイエンド (+1.0) の既定値と純粋な白黒の間の少なくとも中間になります。

interface IWICDevelopRaw : IWICBitmapFrameDecode
{
   HRESULT QueryRawCapabilitiesInfo ( WICRawCapabilitiesInfo *pInfo );
   HRESULT LoadParameterSet ( WICRawParameterSet ParameterSet );
   HRESULT GetCurrentParameterSet ( IPropertyBag2 **ppCurrentParameterSet );
   HRESULT SetExposureCompensation ( double ev );
   HRESULT GetExposureCompensation ( double *pEV );
   HRESULT SetWhitePointRGB ( UINT Red, UINT Green, UINT Blue );
   HRESULT GetWhitePointRGB ( UINT *pRed, UINT *pGreen, UINT *pBlue );
   HRESULT SetNamedWhitePoint ( WICNamedWhitePoint WhitePoint );
   HRESULT GetNamedWhitePoint ( WICNamedWhitePoint *pWhitePoint );
   HRESULT SetWhitePointKelvin ( UINT WhitePointKelvin );
   HRESULT GetWhitePointKelvin ( UINT *pWhitePointKelvin );
   HRESULT GetKelvinRangeInfo ( UINT *pMinKelvinTemp,
               UINT *pMaxKelvinTemp,
               UINT *pKelvinTempStepValue );
   HRESULT SetContrast ( double Contrast );
   HRESULT GetContrast ( double *pContrast );
   HRESULT SetGamma ( double Gamma );
   HRESULT GetGamma ( double *pGamma );
   HRESULT SetSharpness ( double Sharpness );
   HRESULT GetSharpness ( double *pSharpness );
   HRESULT SetSaturation ( double Saturation );
   HRESULT GetSaturation ( double *pSaturation );
   HRESULT SetTint ( double Tint );
   HRESULT GetTint ( double *pTint );
   HRESULT SetNoiseReduction ( double NoiseReduction );
   HRESULT GetNoiseReduction ( double *pNoiseReduction );
   HRESULT SetDestinationColorContext (const IWICColorContext *pColorContext );
   HRESULT SetToneCurve ( UINT cbToneCurveSize,
               const WICRawToneCurve *pToneCurve );
   HRESULT GetToneCurve ( UINT cbToneCurveBufferSize,
               WICRawToneCurve *pToneCurve,
               UINT *pcbActualToneCurveBufferSize );
   HRESULT SetRotation ( double Rotation );
   HRESULT GetRotation ( double *pRotation );
   HRESULT SetRenderMode ( WICRawRenderMode RenderMode );
   HRESULT GetRenderMode ( WICRawRenderMode *pRenderMode ); 
   HRESULT SetNotificationCallback ( IWICDevelopRawNotificationCallback 
               *pCallback );
}

QueryRawCapabilitiesInfo

QueryRawCapabilitiesInfo は、この生ファイルでサポートされている一連の機能を返します。 WICRawCapabilitiesInfo 構造体は次のように定義されます。

struct WICRawCapabilitiesInfo
{
   UINT cbSize;
   UINT CodecMajorVersion;
   UINT CodecMinorVersion;
   WICRawCapabilities ExposureCompensationSupport;
   WICRawCapabilities ContrastSupport;
   WICRawCapabilities RGBWhitePointSupport;
   WICRawCapabilities NamedWhitePointSupport;
   UINT NamedWhitePointSupportMask;
   WICRawCapabilities KelvinWhitePointSupport;
   WICRawCapabilities GammaSupport;
   WICRawCapabilities TintSupport;
   WICRawCapabilities SaturationSupport;
   WICRawCapabilities SharpnessSupport;
   WICRawCapabilities NoiseReductionSupport;
   WICRawCapabilities DestinationColorProfileSupport;
   WICRawCapabilities ToneCurveSupport;
   WICRawRotationCapabilities RotationSupport;              
}

この構造体で使用される WICRawCapabilities 列挙体は、次のように定義されます。

enum WICRawCapabilities 
{   
   WICRawCapabilityNotSupported,
   WICRawCapabilityGetSupported,
   WICRawCapabilityFullySupported
}

最後のフィールドは 、次のように定義された WICRawRotationCapabilities 列挙です。

enum WICRawRotationCapabilities                    
{
   WICRawRotationCapabilityNotSupported,
   WICRawRotationCapabilityGetSupported,
   WICRawRotationCapabilityNinetyDegreesSupported
   WICRawRotationCapabilityFullySupported
}

LoadParameterSet

LoadParameterSet を使用すると、ユーザーは[ショット形式] 設定を使用するか、ユーザーが調整した設定を使用するか、デコーダーにイメージの自動修正を要求するかを指定できます。

enum WICRawParameterSet
{
   WICAsShotParameterSet,
   WICUserAdjustedParameterSet,
   WICAutoAdjustedParameterSet
}

GetCurrentParameterSet

GetCurrentParameterSet は、現在のパラメーターが設定された IPropertyBag2 を返します。 呼び出し元は、エンコーダー オプションとして使用するために、このパラメーター セットをエンコーダーに渡すことができます。

Set/GetExposureCompensation

GetExposureCompensationSetExposureCompensation は、最終的な出力に適用する露出補正を示します。 EV の有効な範囲は 、-5.0 から +5.0 のストップです。

Set/GetCurrentParameterRGB、Set/GetNamedWhitePoint、Set/GetwhitePointKelvin

これらの関数はすべて、RGB 値、プリセットの名前付き値、または Kelvin 値として、ホワイト ポイントを取得および設定する方法を提供します。 Kelvin の許容範囲は 1,500 ~ 30,000 です。

Set/GetContrast

GetContrastSetContrast は、出力に適用するコントラストの量を示します。 コントラストを指定する有効な範囲は -1.0 から +1.0 で、既定のコントラストは 0.0 です。

Set/GetGamma

GetGammaSetGamma は、適用するガンマを示します。 Gamma の有効な範囲は 0.2 から 5.0 で、既定値は 1.0 です。 ガンマは通常、従来のガンマパワー関数(ユニティゲインを持つ線形電力関数)を使用して実装されます。 ガンマが 0 に近づくと、明るさが増加し、ガンマが減少します。 (0 の場合、従来のガンマ計算では 0 除算エラーが発生するため、最小値は 0 以外であることに注意してください。論理最小制限は 1/max であるため、最小値は 0.2 です)。

Set/GetSharpness

GetSharpnessSetSharpness は、適用するシャープネスの量を示します。 有効な範囲は –1.0 から +1.0 で、0.0 は既定のシャープン量であり、–1.0 はシャープニングがないことを示します。

Set/GetSaturation

GetSaturationSetSaturation は、適用する彩度の量を示します。 彩度を指定する有効な範囲は -1.0 から +1.0 で、0.0 は通常の彩度、–1.0 は完全な彩度を表し、+1.0 は完全な彩度を表します。

Set/GetTint

GetTintSetTint は、適用する濃淡を緑/マゼンタバイアスで示します。 有効な範囲は -1.0 から +1.0 で、緑色はスケールの負の側に、マゼンタは正の側にあります。 濃淡スケールは、色温度に対して直交として定義されます。

Set/GetNoiseReduction

GetNoiseReductionSetNoiseReduction は 、適用するノイズリダクションの量を示します。 の有効な範囲は -1.0 ~ +1.0 で、0.0 は既定のノイズ低減量を示し、–1.0 はノイズリダクションがないことを示し、+1.0 は最大ノイズリダクションを示します。

SetDestinationColorContext

SetDestinationColorContext は、イメージに適用するカラー プロファイルを指定します。 GetColorContexts を呼び出して、現在のカラー プロファイルを取得できます。

Set/GetToneCurve

GetToneCurveSetToneCurve では 、適用するトーン カーブを指定します。 ポイント間の線形補間を想定します。 pToneCurveWICRawToneCurve 構造体です。この構造体には、WICRawToneCurvePoint 構造体の配列と、配列内のポイント数のカウントが含まれます。

struct WICRawToneCurve 
{
   UINT cPoints;
   WICRawToneCurvePoint aPoints[];
}

WICRawToneCurvePoint には、入力値と出力値が含まれています。

struct WICRawToneCurvePoint 
{
   double Input;
   double Output;
}

呼び出し元が pToneCurve パラメーターで NULL を渡す場合は、pcbActualToneCurveBufferSize パラメーターで WICRawToneCurve に必要なサイズを返す必要があります。

Set/GetRotation

GetRotationSetRotation は、適用する回転の程度を示します。 回転が 90.0 の場合、時計回りに 90 度の回転が指定されます。 ( SetRotation の使用と CopyPixels メソッドを使用した回転の設定の違いは、 SetRotation を使用して設定された回転角度をコーデックで保持する必要があるのに対し、 CopyPixels を使用して回転を設定すると、メモリ内のイメージのみが回転するという点です。

Set/GetRenderMode

GetRenderModeSetRenderMode は、呼び出し元が必要とする出力の品質レベルを示します。 ユーザーがパラメーターを調整している場合、アプリケーションには、変更が適用された場合の実際の画像の外観の非常に高速な近似値が表示されます。 このため、画像は通常、実際の画像解像度ではなく画面解像度以下で表示され、ユーザーに即座にフィードバックを提供します。 これは、アプリケーションが下書きモードの品質を要求する場合であるため、これは非常に高速である必要があります。 ユーザーがすべての変更を行い、下書きモードでプレビューし、現在の設定で完全なイメージをデコードすることにした場合、アプリケーションは Best Quality デコードを要求します。 これは通常、印刷にも要求されます。 速度と品質の間に妥当なトレードオフが必要な場合、アプリケーションは標準品質を要求します。

enum WICRawRenderMode
{
   WICRawRenderModeDraftMode,
   WICRawRenderModeNormalQuality ,
   WICRawRenderModeBestQuality
}

SetNotificationCallback

SetNotificationCallback は、生処理パラメーターのいずれかが変更されたときにデコーダーが呼び出すコールバック関数を登録します。 IWICDevelopRawNotificationCallback のシグネチャには、Notify という名前のメソッドが 1 つだけ含まれますNotify には 1 つのパラメーターがあります。これは、未加工の処理パラメーターのうち、どのパラメーターが変更されたかを示すマスクです。

HRESULT Notify ( UINT NotificationMask );

NotificationMask の次の値に対して OR 操作が実行されます。

WICRawChangeNotification_ExposureCompensation
WICRawChangeNotification_NamedWhitePoint
WICRawChangeNotification_KelvinWhitePoint
WICRawChangeNotification_RGBWhitePoint
WICRawChangeNotification_Contrast
WICRawChangeNotification_Gamma
WICRawChangeNotification_Sharpness
WICRawChangeNotification_Saturation
WICRawChangeNotification_Tint
WICRawChangeNotification_NoiseReduction
WICRawChangeNotification_DestinationColorContext
WICRawChangeNotification_ToneCurve
WICRawChangeNotification_Rotation
WICRawChangeNotification_RenderMode

リファレンス

IWICDevelopRaw

概念

IWICBitmapSourceTransform の実装

WIC-Enabled エンコーダーの実装

WIC-Enabled コーデックを記述する方法

Windows Imaging コンポーネントの概要