次の方法で共有


ヒストグラム効果

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

この効果の 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));

効果のプロパティ

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

ヒストグラム効果の出力を生成する式。

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

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

チャネル セレクター

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

データ出力

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

解説

注意

デバイスが 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