直方图效果

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

此效果的 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));

效果属性

下面是用于生成输出的公式。

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

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

显示名称和索引枚举 类型和默认值 描述
NumBins
D2D1_HISTOGRAM_PROP_NUM_BINS
UINT32
256
指定用于直方图的箱数。 属于特定存储桶的强度值的范围取决于指定存储桶的数量。
ChannelSelect
D2D1_HISTOGRAM_PROP_CHANNEL_SELECT
D2D1_CHANNEL_SELECTOR
D2D1_CHANNEL_SELECTOR_R
指定用于生成直方图的通道。 此效果具有与指定通道对应的单个数据输出。 有关详细信息,请参阅 频道选择器
直方图输出
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[] 中的每个元素都是浮点数。 元素的值对应于该箱中的元素数。

言论

注意

如果设备不支持 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