我有一个像素数组 (m_pixels),我想使用 Direct2D 将其呈现到屏幕上。该数组包含 10,000 个元素(100 行 100 像素)。下面的代码循环遍历像素并将它们作为 10x10 矩形绘制到屏幕上。有没有更有效的方法来执行此操作?如何为像素/图像添加高斯模糊效果?
m_d2dContext->BeginDraw();
m_d2dContext->Clear(ColorF(0.0f, 0.0f, 0.0f));
// Render m_pixels
// m_pixels is updated by the solver directly before render
auto rect = D2D1_RECT_F();
ComPtr<ID2D1SolidColorBrush> pBlackBrush;
DX::ThrowIfFailed(m_d2dContext->CreateSolidColorBrush(ColorF(1.0f, 0.0f, 0.0f),&pBlackBrush));
for (int i=0; i<10000; i++){
//Update the color
pBlackBrush->SetColor(D2D1::ColorF(m_pixels[i]*3, m_pixels[i], m_pixels[i]));
//Update the rectangle size
rect.top = 10*floor(i/100);
rect.left = 10*floor(i%100);
rect.bottom = 10*floor(i/100) + 10;
rect.right = 10*floor(i%100) + 10;
//Set the rectangle color
m_d2dContext->FillRectangle(rect, pBlackBrush.Get());
}
HRESULT hr = m_d2dContext->EndDraw();
尝试使用 ID2D1RenderTarget::CreateBitmap()
和 ID2D1RenderTarget::DrawBitmap()
如何为像素/图像添加高斯模糊效果?
在 Direct2D 中,有用于简单位图处理的效果 (ID2D1Effect)。你可以自己编写[看起来比较复杂],或者使用内置效果之一[相当简单]。其中之一是高斯模糊。