代码之家  ›  专栏  ›  技术社区  ›  user138512

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

  •  0
  • user138512  · 技术社区  · 15 年前

    我有一个.NET GDI+位图对象(或者如果它使WPF位图对象的问题变得更容易的话),我想要的是通过dx,dy(整个像素)移动整个部分,理想情况下我希望使用.NET来完成,但是API调用是可以的。 它必须是有效的,因为它将被称为10000次,比如说中等大的位图。

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

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

    必须有一种“就地”的方法来移动位图。 米凯

    4 回复  |  直到 15 年前
        1
  •  0
  •   Tim Robinson    15 年前

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

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

        2
  •  0
  •   Ron Warholic    15 年前

    你只想移动整个图形吗?DrawImagex有x,y参数。我可能没有正确地解释你的问题。

    顺便说一下,当你处理10000张图片时,GDI不会是一个有效的周期。如果你想要接近实时的性能,你就必须重新设计你的算法或者研究一个3D的API(比如DirectX或者OpenGL)或者两者兼而有之。

        3
  •  0
  •   user138512user138512    15 年前

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

    我已经得到了合理的解决方案,同时使用DrawImage和ScrollWindowExAPI调用,大约快10倍。

    我还在想如何用WPF做得更快。

        4
  •  0
  •   user138512user138512    15 年前

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