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