Compartilhar via


Efeito histograma

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

O CLSID para esse efeito é CLSID_D2D1Histogram.

Exemplo

Antes
a imagem antes do efeito.
Grafo 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 de efeito

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

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

i é avaliado de 0 para o número de compartimentos. O efeito gera um histograma para valores de pixel entre 0 e 1. Os valores fora desse intervalo são fixados no 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 cores do bitmap de entrada são divididos pelo canal alfa para calcular esse efeito.

Nome de 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 se enquadram 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. Esse efeito tem uma única saída de dados correspondente ao canal especificado. Consulte Seletores de canal para obter mais informações.
HistogramOutput
D2D1_HISTOGRAM_PROP_HISTOGRAM_OUTPUT
FLOAT[]
Somente propriedade de saída.
A matriz de saída.

Seletores de canal

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 de histograma com base no canal verde.
D2D1_CHANNEL_SELECTOR_B O efeito gera a saída de histograma com base no canal azul.
D2D1_CHANNEL_SELECTOR_A O efeito gera a saída de histograma com base no canal alfa.

Saída de dados

Esse efeito gera um FLOAT[], com o número de elementos correspondente ao número de compartimentos especificados. Cada elemento no FLOAT[] é um float. 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 der suporte ao DirectCompute e retornar HRESULT = D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES. Todos os cartões DirectX11 e cartões DirectX10 que dão suporte ao DirectCompute podem usar o efeito .

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8 e Atualização de Plataforma para Windows 7 [aplicativos da área de trabalho | Aplicativos da Windows Store]
Servidor mínimo com suporte Windows 8 e Atualização de Plataforma para Windows 7 [aplicativos da área de trabalho | Aplicativos da Windows Store]
Cabeçalho d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect