0

我想通过 ID2D1RenderTarget 滚动使用 Direct2D api 执行绘图的窗口内容。

在 GDI 中,我可以使用 CreateCompatibleDC 创建一个缓冲区,然后使用 ScrollDC 滚动其内容,重绘暴露区域并将缓冲区 BitBlt 到窗口。

我在 Direct2D 中看不到任何必要的 API 来执行相同的操作。如何在不使用 GetDC(和 GDI)以及不使用自己的第三个缓冲区的情况下实现相同的功能?

4

3 回答 3

3

你可以使用翻译。

MSDN:平移 2-D 对象是沿 x 轴、y 轴或两者移动对象。

m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Translation(20, 10));

更多细节在这里 http://msdn.microsoft.com/en-us/library/windows/desktop/dd756691(v=vs.85).aspx

于 2012-10-18T14:51:45.783 回答
3

Direct2D 中没有滚动 API。获得硬件加速滚动的最佳解决方案是使用第二个缓冲区。在ID2D1RenderTarget您要滚动的地方,使用CreateCompatibleRenderTarget()创建一个ID2D1BitmapRenderTarget (缓存这个家伙是个好主意),其像素大小ID2D1RenderTarget::GetPixelSize()与从ID2D1RenderTarget::GetDpi(). 然后,用于ID2D1BitmapRenderTarget::GetBitmap()获取底层ID2D1Bitmap. 接下来,使用ID2D1Bitmap::CopyFromRenderTarget()复制内容并调整您滚动的距离。然后将该位图的内容复制回原始渲染目标,重新渲染未覆盖的区域,并呈现(通过 EndDraw)。

于 2012-05-21T06:40:38.763 回答
1

在 DXGI 1.2 中有一个带 参数的新IDXGISwapChain1::Present1API 调用。DXGI_PRESENT_PARAMETERS它包含支持滚动窗口内容的功能。

于 2013-02-03T17:04:46.757 回答