2011-09-18 56 views
1

我有问题的图形对象。我有一个循环遍历一些数组,并从它们获取图像,并在图片框上绘制它们。每件事情都很好,但是当我尝试调整大小或绘制另一个更加沉重的东西时,每件事物都开始闪烁,就像他们在绘画时一样。我知道绘制所有该死的东西太重了!但有什么办法可以避免撕裂?GDI +撕裂! VB.NET

谢谢。

编辑:

我的代码:

graphic.Clear(frmmain.Workspace.BackColor) 
For i = 0 To mObjectsList.Count - 1 
    graphic.DrawImage(mObjectsList(i).oGraphic, mObjectsList(i).oX, mObjectsList(i).oY, mObjectsList(i).oWidth, mObjectsList(i).oHeight) 
Next 
+1

任何代码,你想与我们分享,以加强你的描述,现在你谈论一些* GDI +撕裂*这对我来说没有意义? –

+0

哦,是的,一会儿。 – MahanGM

+0

好的,现在你已经显示了一些代码,我有几个问题:1.什么是'graphic',你如何获取对它的引用? 2.“mObjectsList”列表的大小是多少? 3.该代码在哪里执行? –

回答

3

图形是我创造了它从我的PictureBox的图形对象

一个PictureBox没有一个变量图形对象。做不是使用它的CreateGraphics()方法。无论你画的是什么,它只停留在屏幕上几分之一秒,几乎没有任何瑕疵。改为在Paint事件处理程序中使用e.Graphics。这引入了双缓冲位图。 PictureBox始终将其DoubleBuffered属性设置为true。 Paint事件完成时绘制该位图。这就是为什么你的对象闪烁,他们再次通过该位图透支。

+0

你又来了!谢谢。是的,我的意思是CreateGraphic方法不是对象。顺便说一句我想在另一个函数中使用e.Graphic,我通过一个变量得到它,但是第一个运行这个变量的代码给出错误。我不知道,我可以用不好的方式使用它。我定义了一个公共变量,并在绘图中将它赋值为这样** mWorkspaceGraphic = e.Graphics **然后在运行时,第一个代码** mWorkspaceGraphic.Clear(...)**给了我错误'Parameter is not valid'。 – MahanGM

+0

好吧,当然,三个点不是一个有效的参数。不知道你如何期待我对这种异常进行逆向工程,我只能猜测CreateGraphics。只需将e.Graphics作为参数传递给任何想要进行绘制的方法。将它存储在一个变量中是一个糟糕的想法,它只有在Paint事件运行时才有效。在尝试使用它之后会去kaboom。重复迭代:只绘制绘画事件。如果您有重新绘制某些内容的理由,请调用该控件的Invalidate()方法。这使得Paint事件运行。最终。 –

+0

对不起,关于这三个点它只是'frmmain.Workspace.BackColor'。我知道你在说什么,但我希望能够从任何地方打电话给我的抽奖功能。这样我就可以使用Paint事件来获得'e.Graphics'。那么,任何解决方案? – MahanGM