次の方法で共有


ヒストグラム効果

ヒストグラム効果を使用して、指定されたビン数に基づいて入力ビットマップのヒストグラムを生成します。

この効果の CLSID はCLSID_D2D1Histogram。

以前は
効果の前に画像を します。
ヒストグラム出力データのグラフ
変換後にイメージを します。
ComPtr<ID2D1Effect> histogramEffect;
m_d2dContext->CreateEffect(CLSID_D2D1Histogram, &histogramEffect);

histogramEffect->SetInputEffect(0, m_2DAffineTransformEffectRight.Get());
histogramEffect->SetValue(D2D1_HISTOGRAM_PROP_CHANNEL_SELECT, D2D1_CHANNEL_SELECTOR_G);

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(histogramEffect.Get());
m_d2dContext->EndDraw();

// The histogram data is only available once the effect has been 'drawn'.
int histogramBinCount;

HRESULT hr = histogramEffect->GetValue(D2D1_HISTOGRAM_PROP_NUM_BINS, &histogramBinCount);

float *histogramData = new float[histogramBinCount];
hr = histogramEffect->GetValue(D2D1_HISTOGRAM_PROP_HISTOGRAM_OUTPUT, 
                               reinterpret_cast<BYTE*>(histogramData), 
                               histogramBinCount * sizeof(float));

Effect プロパティ

出力を生成する数式を次に示します。

式を して、ヒストグラム効果の出力を生成します。

i は、0 からビンの数まで評価されます。この効果により、0 ~ 1 のピクセル値のヒストグラムが生成されます。 この範囲外の値は、範囲にクランプされます。 特定のバケットの範囲は、バケットの数によって異なります。 この効果は、直線のビットマップ ピクセルで動作します。 入力ビットマップのカラー チャネルはアルファ チャネルで除算され、この効果が計算されます。

表示名とインデックス列挙 型と既定値 形容
NumBins
D2D1_HISTOGRAM_PROP_NUM_BINS
UINT32
256
ヒストグラムに使用されるビンの数を指定します。 特定のバケットに分類される強度値の範囲は、指定されたバケットの数によって異なります。
ChannelSelect
D2D1_HISTOGRAM_PROP_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_R
ヒストグラムの生成に使用するチャネルを指定します。 この効果には、指定されたチャネルに対応する 1 つのデータ出力があります。 詳細については、「チャネル セレクターの」を参照してください。
HistogramOutput
D2D1_HISTOGRAM_PROP_HISTOGRAM_OUTPUT
FLOAT[]
出力プロパティのみ。
出力配列。

チャネル セレクター

列挙 形容
D2D1_CHANNEL_SELECTOR_R この効果は、赤いチャネルに基づいてヒストグラムの出力を生成します。
D2D1_CHANNEL_SELECTOR_G この効果により、緑色のチャネルに基づいてヒストグラムの出力が生成されます。
D2D1_CHANNEL_SELECTOR_B この効果により、青色のチャネルに基づいてヒストグラムの出力が生成されます。
D2D1_CHANNEL_SELECTOR_A この効果により、アルファ チャネルに基づいてヒストグラム出力が生成されます。

データ出力

この効果は、指定されたビンの数に対応する要素の数を持つ FLOAT[] を出力します。FLOAT[] 内の各要素は float です。 要素の値は、そのビン内の要素の数に対応します。

備考

手記

デバイスが DirectCompute をサポートせず、HRESULT = D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES を返す場合、CreateEffect メソッドは失敗します。 DirectCompute をサポートするすべての DirectX11 カードと DirectX10 カードで効果を使用できます。

必要条件

要件 価値
サポートされる最小クライアント Windows 7 用 Windows 8 およびプラットフォーム更新プログラム [デスクトップ アプリ |[Windows ストア アプリ]
サポートされている最小サーバー Windows 7 用 Windows 8 およびプラットフォーム更新プログラム [デスクトップ アプリ |[Windows ストア アプリ]
ヘッダ d2d1effects.h
図書館 d2d1.lib、dxguid.lib

ID2D1Effect