gpt4 book ai didi

c# - 在 picturebox 上绘制位图背景时出现内存不足错误

转载 作者:行者123 更新时间:2023-11-30 20:48:07 25 4
gpt4 key购买 nike

这是我的问题:

此方法以 50 毫秒的时间间隔重复。从程序开始到及时向前,此进程的 RAM 内存不断增长,最后调试器向我抛出“内存不足错误”到加粗的行(drawimage 方法)。

有没有人能帮助我找到避免这种情况的解决方案并向我解释为什么会发生这种情况?

附言。我的目标是连续旋转图片框的背景图像。我知道也许我可以直接在窗体上而不是在 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!
}

关于c# - 在 picturebox 上绘制位图背景时出现内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25065170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com