Partager via


Effet d’histogramme

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

Le CLSID de cet effet est CLSID_D2D1Histogram.

Exemple

Avant
image avant l’effet.
Graphique des données de sortie de l’histogramme
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 de l’effet

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

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

i est évalué de 0 au nombre de bacs. L’effet génère un histogramme pour les valeurs de pixel 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 les 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 seule sortie de données 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 une valeur FLOAT[], avec le nombre d’éléments correspondant au nombre de compartiments spécifiés. Chaque élément du FLOAT[] est un float. La valeur de l’élément correspond au nombre d’éléments dans ce bac.

Notes

Notes

La méthode CreateEffect é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.

Spécifications

Condition requise Valeur
Client minimal pris en charge Windows 8 et mise à jour de plateforme pour Windows 7 [applications de bureau | Applications du Windows Store]
Serveur minimal 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