这是我的问题:
重复此方法的时间间隔为50毫秒。
从程序的开始到时间的推移,此过程的RAM内存不断增长,最后调试器将我“内存不足错误”扔到了加粗的行(drawimage方法)。
有谁能帮助我找到避免这种情况的解决方案,并向我解释为什么会发生这种情况?
PS。我的目标是连续旋转图片框的背景图像。我知道也许我可以直接在窗体上绘制而不是在pictureBox上绘制,但是如果有pictureBox的解决方案,我会很高兴:p
谢谢!
public static Bitmap RotateImage(Image image, PointF offset, float angle)
{
if (image == null)
throw new ArgumentNullException("image");
//create a new empty bitmap to hold rotated image
Bitmap rotatedBmp = new Bitmap(image.Width, image.Height);
rotatedBmp.SetResolution(image.HorizontalResolution, image.VerticalResolution);
//make a graphics object from the empty bitmap
Graphics g = Graphics.FromImage(rotatedBmp);
//Put the rotation point in the center of the image
g.TranslateTransform(offset.X, offset.Y);
//rotate the image
g.RotateTransform(angle);
//move the image back
g.TranslateTransform(-offset.X, -offset.Y);
//draw passed in image onto graphics object
**g.DrawImage(image, new PointF(0, 0));**
return rotatedBmp;
}
最佳答案
您还需要同时使用旧的位图的Dispose()。
假设您的代码如下所示:
public static Bitmap RotateImage(Image image, PointF offset, float angle)
{
if (image == null)
throw new ArgumentNullException("image");
//create a new empty bitmap to hold rotated image
Bitmap rotatedBmp = new Bitmap(image.Width, image.Height);
rotatedBmp.SetResolution(image.HorizontalResolution, image.VerticalResolution);
return rotatedBmp;
}
我尝试循环调用您的函数,但仍然失败!我不得不自己处理位图。我不清楚.NET为什么不清理它们。
Image img = new Bitmap(@"some_image.png");
PointF p = new PointF(0,0);
for (int i=0; i<5000; i++)
{
Bitmap b = RotateImage(img, p, i % 360);
b.Dispose(); // Fails if you don't do this!
}