【问题标题】:Auto scrolling or shifting a bitmap in .NET在 .NET 中自动滚动或移动位图
【发布时间】:2009-08-26 16:34:18
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# graphics bitmap shift


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-05-01
            • 2011-04-17
            • 1970-01-01
            • 2012-05-02
            • 1970-01-01
            • 2014-05-13
            • 1970-01-01
            相关资源
            最近更新 更多