在.NET中自动滚动或移动位图

时间:2009-08-26 16:34:18

标签: c# graphics bitmap shift

我有一个.NET GDI +位图对象(或者如果它使问题更容易成为WPF位图对象)而我想要的是将整个移位dx,dy(整个像素)并且我理想地喜欢这样做它使用.NET但API调用没问题。 它必须是高效的,因为它会被称为10,000倍的中等大位图。

我已经使用DrawImage实现了一个解决方案 - 但它很慢并且在GC清理已使用的临时对象时会暂停应用程序几分钟。

我也开始使用ScrollDC处理一个版本,但到目前为止还没有运气使它在位图的DC上工作(我可以使它工作购买创建一个带位图句柄的API位图,然后创建一个兼容的DC asnd调用ScrollDC,但后来我必须把它放回到位图对象中。)

必须有一种“就地”的方式来移动位图。 mikej

4 个答案:

答案 0 :(得分:0)

您是否找到了Graphics.FromImage方法?这将让您直接操作位图。我不确定你在DrawImage中使用了什么,但是Graphics.DrawImage应该允许你将位图的一个区域复制到自身上(并在过程中应用一个移位)。

或者,给定Graphics对象,您可以使用Graphics.GetHdc,ScrollDC和Graphics.ReleaseHdc。

答案 1 :(得分:0)

你只是想移动整个图形吗? DrawImage有x,y参数来做到这一点。我可能没有正确解释你的问题。

另外,当您使用10,000张图像时,GDI不会是有效的时期。如果您想要接近实时性能,您将不得不重新编写算法或查看3D API(如DirectX或OpenGL)或两者兼而有之。

答案 2 :(得分:0)

很抱歉,如果我的问题不太清楚。 我正在尝试做的就是滚动一个位图,即进行移位操作。 例如,像Scroll(B,1,0)这样的方法会将整个位图B向右移动一个像素。

我使用DrawImage和ScrollWindowEx API调用得到了合理的解决方案,速度提高了大约10倍。

我还在尝试弄清楚如何使用WPF更快地做点什么。

答案 3 :(得分:0)

我已经在Scrolling a bitmap 写了解问题的解决方案,但我仍然不确定是否有更好的方法,如果在WPF中做得更好?