Partilhar via


Efeito do histograma

Use o efeito de histograma para gerar um histograma para o bitmap de entrada com base no número especificado de compartimentos.

O CLSID para este efeito é CLSID_D2D1Histogram.

Exemplo

Antes
a imagem antes do efeito.
Gráfico dos dados de saída do histograma
a imagem após a transformação.
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));

Propriedades do efeito

Aqui está a equação para gerar a saída.

a equação para gerar a saída do efeito do histograma.

i é avaliado de 0 ao número de caixotes. O efeito gera um histograma para valores de pixel entre 0 e 1. Os valores fora desse intervalo são fixados ao intervalo. O intervalo de um bucket específico depende do número de buckets. Esse efeito funciona em pixels de bitmap retos. Os canais de cor do bitmap de entrada são divididos pelo canal alfa para calcular esse efeito.

Nome para exibição e enumeração de índice Tipo e valor padrão Descrição
NumBins
D2D1_HISTOGRAM_PROP_NUM_BINS
UINT32
256
Especifica o número de compartimentos usados para o histograma. O intervalo de valores de intensidade que caem em um bucket específico depende do número de buckets especificados.
ChannelSelect
D2D1_HISTOGRAM_PROP_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_R
Especifica o canal usado para gerar o histograma. Este efeito tem uma única saída de dados correspondente ao canal especificado. Consulte de seletores de canal para obter mais informações.
HistogramOutput
D2D1_HISTOGRAM_PROP_HISTOGRAM_OUTPUT
FLUTUAR[]
Somente propriedade de saída.
A matriz de saída.

Seletores de canais

Enumeração Descrição
D2D1_CHANNEL_SELECTOR_R O efeito gera a saída do histograma com base no canal vermelho.
D2D1_CHANNEL_SELECTOR_G O efeito gera a saída do histograma com base no canal verde.
D2D1_CHANNEL_SELECTOR_B O efeito gera a saída do histograma com base no canal azul.
D2D1_CHANNEL_SELECTOR_A O efeito gera a saída do histograma com base no canal alfa.

Saída de dados

Este efeito produz um FLOAT[], com o número de elementos correspondente ao número de compartimentos especificados. Cada elemento no FLOAT[] é um flutuador. O valor do elemento corresponde ao número de elementos nesse compartimento.

Comentários

Observação

O método CreateEffect falhará se o dispositivo não suportar DirectCompute e retornar HRESULT = D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES. Todas as placas DirectX11 e DirectX10 que suportam DirectCompute podem usar o efeito.

Requerimentos

Exigência Valor
Cliente mínimo suportado Windows 8 e Atualização da Plataforma para Windows 7 [aplicações de ambiente de trabalho | Aplicações da Loja Windows]
Servidor mínimo suportado Windows 8 e Atualização da Plataforma para Windows 7 [aplicações de ambiente de trabalho | Aplicações da Loja Windows]
Cabeçalho d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect