0

我有一个 .NET GDI+ 位图对象(或者如果它使问题更容易成为 WPF 位图对象),我想要将整个地块移动 dx,dy (整个像素),理想情况下我希望使用 . NET 但 API 调用没问题。它必须是高效的,因为它会被调用 10,000 次,比如使用中等大小的位图。

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

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

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

4

4 回答 4

0

对不起,如果我的问题不太清楚。我要做的只是滚动位图,即进行移位操作。例如,像 Scroll(B,1,0) 这样的方法会将整个位图 B 向右移动一个像素。

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

我仍在尝试找出如何使用 WPF 更快地做某事。

于 2009-09-01T15:59:05.063 回答
0

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

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

于 2009-08-26T18:15:06.930 回答
0

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

顺便说一句,当您处理 10,000 张图像时,GDI 不会是有效的时期。如果您想要接近实时的性能,您将不得不重新设计您的算法或查看 3D API(如 DirectX 或 OpenGL)或两者兼而有之。

于 2009-08-26T18:19:13.770 回答
0

我已经在Scrolling a bitmap中写了我的解决方案,但我仍然不确定是否有更好的方法,以及是否可以更好地使用 WPF?

于 2009-09-03T10:40:27.797 回答