0

我有一个像这样绘制位图的方法:

public void DrawGrid(){
GridBitMap = new Bitmap(x,y);
MyGraphic = Graphics.FromImage(GridBitMap);
MyGraphic.FillRectangle(BackGround, 0, 0, x, y);

//Then using loops I draw various lines like this

MyGraphic.DrawLine(Pen.Black,x,y,xx,yy);

//Then I add the Bitmap to a Picturebox 

PictureBox.Image = GridBitMap;
}

我的问题是,每次调用该方法时。我使用越来越多的资源。如何在不引起太多闪烁的情况下释放位图和图形?并防止代码消耗越来越多的资源?

4

3 回答 3

2

首先,您可以存储位图,而不是为每个绘制调用构建一个新的。这应该会大大减少资源消耗。你应该只在它的大小改变时生成一个新的(我想就是 x 和 y 改变)。

另外,为什么不使用 ScoreGraphic.Clear 清空它?

而且,最重要的是,您为什么不直接从 ScorePictureBox.Paint 事件中绘制到 PaintEventArgs 给您的 Graphics 中呢?

于 2012-05-14T16:55:57.133 回答
1

你应该试试这个

using (Bitmap GridBitMap = new Bitmap(x,y))
{
   using (Graphics ScoreGraphic = Graphics.FromImage(GridBitMap)
   {
     ...
   }
}

如果您实际上不需要位图,为什么不直接在图片框中绘制呢?每次创建位图都非常耗费时间和资源。

希望这是你所要求的。using close 确保即使出现异常或过早退出函数,资源也会被释放。

于 2012-05-14T16:54:47.953 回答
1

我认为这个应该解决它:

using(Bitmap bmp as new Bitmap(x,y))
{
  my code...
} //<--important marker..

当指令指针离开“重要标记”时,将发出对 bmp 的 IDisposable 的调用 - 释放资源。

于 2012-05-14T16:57:14.980 回答