如何从Graphics中删除图像

时间:2013-04-06 00:58:06

标签: c# image graphics

假设我使用DrawImage几次绘制一堆图像。

e.Graphics.DrawImage(newImage, destRect);

如何从我绘制的图形纸张中删除特定图像? 是否有可用于删除的特定功能?

我已尝试过disposeRectangle.Empty,但实际上并没有删除我在纸上绘制的图片。

2 个答案:

答案 0 :(得分:1)

krikara,你应该做的是:

  1. 跟踪列表中的所有砖块
  2. 当球击中砖块时,从列表中删除该砖块
  3. 每一帧,你必须从头开始重绘。这包括球,球拍和砖块清单(以及你需要的任何其他东西,比如得分等)。

    希望这可以解决你的困惑。

答案 1 :(得分:1)

首先,GDI + Graphics中没有“删除对象”的概念。您必须在每个帧中重绘整个客户区。您应该在内存中保留对象及其状态列表,并在每个帧中重绘整个表面。但要注意,这可能导致闪烁和不那么流畅的用户体验。以下是一些避免这些的提示:

  1. 确保您的Form或UserControl的DoubleBuffered属性设置为True。这将导致动画更加平滑。

  2. 永远不要调用CreateGraphics()来获取绘图循环中Graphics对象的引用。更新循环中的对象和状态列表,然后在控件/表单上调用Invalidate(),并在Paint事件中执行绘图过程。

  3. Invalidate()的一个重载允许您指定需要失效的矩形(重绘)。您可以在弹跳球的当前位置周围传递一个“安全”矩形(比球大小宽20个/更高)作为agrument,然后在Paint事件中仅绘制该部分。

  4. 为了进一步提高性能,您可以在实际“游戏板”之外保留分数,玩家姓名等辅助信息,并使用普通标签/文本框代替绘图。