直方图效果

使用直方图效果根据指定的箱数为输入位图生成直方图。

此效果的 CLSID CLSID_D2D1Histogram。

示例

之前
效果前的图像。
直方图输出数据的图
转换后的图像。
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));

效果属性

下面是生成输出的公式。

用于生成直方图效果输出的公式。

0 到箱数计算 i。该效果为介于 0 和 1 之间的像素值生成直方图。 超出此范围的值被固定到该范围。 特定存储桶的范围取决于存储桶的数量。 此效果适用于直位图像素。 输入位图的颜色通道除以 alpha 通道以计算此效果。

显示名称和索引枚举 类型和默认值 说明
NumBins
D2D1_HISTOGRAM_PROP_NUM_BINS
UINT32
256
指定用于直方图的箱数。 属于特定存储桶的强度值的范围取决于指定的存储桶数。
ChannelSelect
D2D1_HISTOGRAM_PROP_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_R
指定用于生成直方图的通道。 此效果具有对应于指定通道的单个数据输出。 有关详细信息 ,请参阅频道选择器
HistogramOutput
D2D1_HISTOGRAM_PROP_HISTOGRAM_OUTPUT
FLOAT[]
仅限输出属性。
输出数组。

通道选择器

枚举 描述
D2D1_CHANNEL_SELECTOR_R 该效果基于红色通道生成直方图输出。
D2D1_CHANNEL_SELECTOR_G 该效果基于绿色通道生成直方图输出。
D2D1_CHANNEL_SELECTOR_B 该效果基于蓝色通道生成直方图输出。
D2D1_CHANNEL_SELECTOR_A 该效果基于 alpha 通道生成直方图输出。

数据输出

此效果输出 FLOAT[],其中包含对应于指定箱数的元素数。FLOAT[] 中的每个元素都是一个 float。 元素的值对应于该箱中的元素数。

备注

注意

如果设备不支持 DirectCompute 并返回 HRESULT = D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES, CreateEffect 方法将失败。 所有支持 DirectCompute 的 DirectX11 卡和 DirectX10 卡都可以使用该效果。

要求

要求
最低受支持的客户端 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |Windows 应用商店应用]
最低受支持的服务器 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |Windows 应用商店应用]
标头 d2d1effects.h
d2d1.lib、dxguid.lib

ID2D1Effect