如何使用Direct2D有效地将像素写入屏幕

时间:2012-12-11 06:09:36

标签: graphics microsoft-metro directx direct2d

我想要使用Direct2D渲染到屏幕的像素数组(m_​​pixels)。 该数组包含10,000个元素(100行100像素)。下面的代码循环遍历像素,并将它们作为10x10矩形绘制到屏幕上。有没有更有效的方法来执行此操作?如何在像素/图像中添加GaussianBlur效果?

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();

2 个答案:

答案 0 :(得分:1)

尝试使用ID2D1RenderTarget::CreateBitmap()ID2D1RenderTarget::DrawBitmap()

答案 1 :(得分:0)

  

如何为像素/图像添加GaussianBlur效果?

在Direct2D中,有effects(ID2D1Effect)用于简单的位图处理。你可以编写自己的[似乎比较复杂],或者使用built-in effects之一[这很简单]。其中一个是Gaussian blur