Freigeben über


Histogrammeffekt

Verwenden Sie den Histogrammeffekt, um ein Histogramm für die Eingabe-Bitmap basierend auf der angegebenen Anzahl von Bins zu generieren.

Die CLSID für diesen Effekt ist CLSID_D2D1Histogram.

Beispiel

Vorher
das Bild vor dem Effekt.
Diagramm der Histogrammausgabedaten
das Bild nach der Transformation.
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));

Effekteigenschaften

Hier ist die Formel zum Generieren der Ausgabe.

die Gleichung, um die Ausgabe des Histogrammeffekts zu generieren.

i wird von 0 bis zur Anzahl der Behälter ausgewertet. Der Effekt generiert ein Histogramm für Pixelwerte zwischen 0 und 1. Werte außerhalb dieses Bereichs werden an den Bereich geklemmt. Der Bereich eines bestimmten Buckets hängt von der Anzahl der Buckets ab. Dieser Effekt funktioniert bei geraden Bitmappixeln. Die Farbkanäle der Eingabe-Bitmap werden durch den Alphakanal geteilt, um diesen Effekt zu berechnen.

Anzeigename und Indexaufzählung Typ und Standardwert BESCHREIBUNG
NumBins
D2D1_HISTOGRAM_PROP_NUM_BINS
UINT32
256
Gibt die Anzahl der für das Histogramm verwendeten Bins an. Der Bereich der Intensitätswerte, die in einen bestimmten Bucket fallen, hängt von der Anzahl der angegebenen Buckets ab.
ChannelSelect
D2D1_HISTOGRAM_PROP_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_R
Gibt den Kanal an, der zum Generieren des Histogramms verwendet wird. Dieser Effekt hat eine einzelne Datenausgabe, die dem angegebenen Kanal entspricht. Weitere Informationen finden Sie unter Kanalselektoren .
HistogrammOutput
D2D1_HISTOGRAM_PROP_HISTOGRAM_OUTPUT
FLOAT[]
Nur Ausgabeeigenschaft.
Das Ausgabearray.

Kanalselektoren

Enumeration Beschreibung
D2D1_CHANNEL_SELECTOR_R Der Effekt generiert die Histogrammausgabe basierend auf dem roten Kanal.
D2D1_CHANNEL_SELECTOR_G Der Effekt generiert die Histogrammausgabe basierend auf dem grünen Kanal.
D2D1_CHANNEL_SELECTOR_B Der Effekt generiert die Histogrammausgabe basierend auf dem blauen Kanal.
D2D1_CHANNEL_SELECTOR_A Der Effekt generiert die Histogrammausgabe basierend auf dem Alphakanal.

Datenausgabe

Dieser Effekt gibt eine FLOAT[] mit der Anzahl der Elemente aus, die der Anzahl der angegebenen Bins entspricht. Jedes Element im FLOAT[] ist ein Float. Der Wert des Elements entspricht der Anzahl der Elemente in diesem Bin.

Bemerkungen

Hinweis

Die CreateEffect-Methode schlägt fehl, wenn das Gerät DirectCompute nicht unterstützt und HRESULT = D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES zurückgibt. Alle DirectX11-Karten und DirectX10-Karten, die DirectCompute unterstützen, können den Effekt verwenden.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8 und Plattformupdate für Windows 7 [Desktop-Apps | Windows Store-Apps]
Unterstützte Mindestversion (Server) Windows 8 und Plattformupdate für Windows 7 [Desktop-Apps | Windows Store-Apps]
Header d2d1effects.h
Bibliothek d2d1.lib, dxguid.lib

ID2D1Effect