直方图效果
使用直方图效果根据指定的箱数为输入位图生成直方图。
此效果的 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 |