Partager via


Effet histogramme

Utilisez l’effet histogramme pour générer un histogramme pour la bitmap d’entrée en fonction du nombre spécifié de bacs.

Le CLSID pour cet effet est CLSID_D2D1Histogram.

Exemple

Avant
l’image avant l’effet.
Graphique des données de sortie d’histogramme
l’image après la 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));

Propriétés d’effet

Voici l’équation pour générer la sortie.

l’équation pour générer la sortie de l’effet histogramme.

i est évalué de 0 au nombre de bacs. L’effet génère un histogramme pour les valeurs de pixels comprises entre 0 et 1. Les valeurs en dehors de cette plage sont limitées à la plage. La plage d’un compartiment particulier dépend du nombre de compartiments. Cet effet fonctionne sur des pixels bitmap droits. Les canaux de couleur de la bitmap d’entrée sont divisés par le canal alpha pour calculer cet effet.

Nom complet et énumération d’index Type et valeur par défaut Description
NumBins
D2D1_HISTOGRAM_PROP_NUM_BINS
UINT32
256
Spécifie le nombre de bacs utilisés pour l’histogramme. La plage de valeurs d’intensité qui tombent dans un compartiment particulier dépend du nombre de compartiments spécifiés.
ChannelSelect
D2D1_HISTOGRAM_PROP_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_R
Spécifie le canal utilisé pour générer l’histogramme. Cet effet a une sortie de données unique correspondant au canal spécifié. Pour plus d’informations, consultez sélecteurs de canal.
HistogramOutput
D2D1_HISTOGRAM_PROP_HISTOGRAM_OUTPUT
FLOAT[]
Propriété de sortie uniquement.
Tableau de sortie.

Sélecteurs de canal

Énumération Description
D2D1_CHANNEL_SELECTOR_R L’effet génère la sortie de l’histogramme en fonction du canal rouge.
D2D1_CHANNEL_SELECTOR_G L’effet génère la sortie de l’histogramme en fonction du canal vert.
D2D1_CHANNEL_SELECTOR_B L’effet génère la sortie de l’histogramme en fonction du canal bleu.
D2D1_CHANNEL_SELECTOR_A L’effet génère la sortie de l’histogramme en fonction du canal alpha.

Sortie des données

Cet effet génère un FLOAT[], avec le nombre d’éléments correspondant au nombre de bacs spécifiés. Chaque élément du float[] est un float. La valeur de l’élément correspond au nombre d’éléments de ce bac.

Remarques

Note

La méthodeCreateEffectéchoue si l’appareil ne prend pas en charge DirectCompute et retourne HRESULT = D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES. Toutes les cartes DirectX11 et DirectX10 qui prennent en charge DirectCompute peuvent utiliser l’effet.

Exigences

Exigence Valeur
Client minimum pris en charge Windows 8 et Mise à jour de plateforme pour Windows 7 [applications de bureau | Applications du Windows Store]
Serveur minimum pris en charge Windows 8 et Mise à jour de plateforme pour Windows 7 [applications de bureau | Applications du Windows Store]
En-tête d2d1effects.h
Bibliothèque d2d1.lib, dxguid.lib

ID2D1Effect