Condividi tramite


Effetto istogramma

Usare l'effetto istogramma per generare un istogramma per la bitmap di input in base al numero specificato di bin.

Il CLSID per questo effetto è CLSID_D2D1Histogram.

Esempio

Prima
immagine prima dell'effetto.
Grafico dei dati di output dell'istogramma
l'immagine dopo la trasformazione.
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));

Proprietà dell'effetto

Ecco l'equazione per generare l'output.

equazione per generare l'output dell'effetto istogramma.

i viene valutato da 0 al numero di bin. L'effetto genera un istogramma per i valori di pixel compresi tra 0 e 1. I valori al di fuori di questo intervallo sono bloccati all'intervallo. L'intervallo di un bucket specifico dipende dal numero di bucket. Questo effetto funziona sui pixel bitmap dritti. I canali di colore della bitmap di input sono divisi per il canale alfa per calcolare questo effetto.

Enumerazione nome visualizzato e indice Tipo e valore predefinito Descrizione
NumBins
D2D1_HISTOGRAM_PROP_NUM_BINS
UINT32
256
Specifica il numero di bin utilizzati per l'istogramma. L'intervallo di valori di intensità che rientrano in un bucket specifico dipende dal numero di bucket specificati.
ChannelSelect
D2D1_HISTOGRAM_PROP_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_R
Specifica il canale utilizzato per generare l'istogramma. Questo effetto ha un singolo output di dati corrispondente al canale specificato. Per altre informazioni, vedi Selettori di canale .
IstogramOutput
D2D1_HISTOGRAM_PROP_HISTOGRAM_OUTPUT
FLOAT[]
Solo proprietà di output.
Matrice di output.

Selettori di canale

Enumerazione Descrizione
D2D1_CHANNEL_SELECTOR_R L'effetto genera l'output dell'istogramma in base al canale rosso.
D2D1_CHANNEL_SELECTOR_G L'effetto genera l'output dell'istogramma in base al canale verde.
D2D1_CHANNEL_SELECTOR_B L'effetto genera l'output dell'istogramma in base al canale blu.
D2D1_CHANNEL_SELECTOR_A L'effetto genera l'output dell'istogramma in base al canale alfa.

Output dei dati

Questo effetto restituisce float[], con il numero di elementi corrispondenti al numero di bin specificati. Ogni elemento in FLOAT[] è un float. Il valore dell'elemento corrisponde al numero di elementi nel bin.

Commenti

Nota

Il metodo CreateEffect ha esito negativo se il dispositivo non supporta DirectCompute e restituisce HRESULT = D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES. Tutte le schede DirectX11 e DirectX10 che supportano DirectCompute possono usare l'effetto.

Requisiti

Requisito Valore
Client minimo supportato Windows 8 e aggiornamento della piattaforma per Windows 7 [app desktop | App di Windows Store]
Server minimo supportato Windows 8 e aggiornamento della piattaforma per Windows 7 [app desktop | App di Windows Store]
Intestazione d2d1effects.h
Libreria d2d1.lib, dxguid.lib

ID2D1Effect