gpt4 book ai didi

c# - 如果我使用 .Dispose();为什么我继续内存不足

转载 作者:太空宇宙 更新时间:2023-11-03 17:46:09 27 4
gpt4 key购买 nike

我正在使用 C# 3.5 .NET 和 Windows 窗体我有这段代码来管理图像的亮度,它在 trackBar ValueChanges 时激活

public void brightnesstrackBar1_ValueChanged(object sender, EventArgs e) 
{
domainUpDownB.Text = ((int)brightnessTrackBar.Value).ToString();
B = ((int)brightnessTrackBar.Value);
pictureBox2.Image = AdjustBrightness(foto, B);
foto1 = (Bitmap)pictureBox2.Image;
}


public static Bitmap AdjustBrightness(Bitmap Image, int Value)
{

Bitmap TempBitmap = Image;
float FinalValue = (float)Value / 255.0f;
Bitmap NewBitmap = new System.Drawing.Bitmap(TempBitmap.Width, TempBitmap.Height);
Graphics NewGraphics = Graphics.FromImage(NewBitmap);

float[][] FloatColorMatrix ={
new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0, 0, 1, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {FinalValue, FinalValue, FinalValue, 1, 1
}
};

ColorMatrix NewColorMatrix = new ColorMatrix(FloatColorMatrix);
ImageAttributes Attributes = new ImageAttributes();
Attributes.SetColorMatrix(NewColorMatrix);
NewGraphics.DrawImage(TempBitmap, new System.Drawing.Rectangle(0, 0, TempBitmap.Width, TempBitmap.Height), 0, 0, TempBitmap.Width, TempBitmap.Height, System.Drawing.GraphicsUnit.Pixel, Attributes);
Attributes.Dispose();
NewGraphics.Dispose();
return NewBitmap;
}

好的,这就是问题所在……如果我加载大图像(例如以像素为单位)并在移动几步后开始移动 trackBar,它将显示著名的“Out of memory exeption was unhanded”错误指向这一行

  NewGraphics.DrawImage(TempBitmap, 
new System.Drawing.Rectangle(0, 0, TempBitmap.Width, TempBitmap.Height), 0, 0,
TempBitmap.Width, TempBitmap.Height, System.Drawing.GraphicsUnit.Pixel,
Attributes);

如你们所见,我正在处理。我尝试使用

 this.SetStyle(ControlStyles.OptimizedDoubleBuffer | 
ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint, true);

并将双缓冲区设置为 true 但没有任何方法可以解决这个问题,我可以增加程序将使用的内存量,还是有另一种方法来解决这个问题。

最佳答案

您(似乎)为轨迹栏值的每次更新生成一个新图像 'NewBitmap',但您永远不会对该图像进行 Dispose()。

尝试在 pictureBox2.Image = AdjustBrightness(foto, B); 之前插入以下内容

Image oldImg = pictureBox2.Image;
if (oldImg != null)
{
oldImg.Dispose();
}

关于c# - 如果我使用 .Dispose();为什么我继续内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3844206/

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