C# 将图像转换为内存不足错误
我的图像转换程序有问题。我可以转换39幅图像,然后出现以下错误: 引发异常:System.Drawing.dll中的“System.OutOfMemoryException” 我不知道我的代码有什么问题 错误:C# 将图像转换为内存不足错误,c#,C#,我的图像转换程序有问题。我可以转换39幅图像,然后出现以下错误: 引发异常:System.Drawing.dll中的“System.OutOfMemoryException” 我不知道我的代码有什么问题 错误: string[] originalImage = Directory.GetFiles(textBox1.Text); foreach (var filename in originalImage) {
string[] originalImage = Directory.GetFiles(textBox1.Text);
foreach (var filename in originalImage)
{
if (fileExtension.ToUpper() == ".JPG" || fileExtension.ToUpper() == ".PNG")
{
Bitmap bitmap = new Bitmap(filename); //error coming here
//DefaultCompressionJpeg(bitmap);
string fn = Path.GetFileNameWithoutExtension(filename);
VariousQuality(bitmap, fn, fileExtension, fileOriginalDate);
}
}
当您使用完实现IDisposable的每个对象时,您应该处理该对象。以下是程序中的一些一次性对象
Filestream ms,
Bitmap original,
EncoderParameter encoderParameter
当没有足够的内存继续执行程序时,将引发OutOfMemoryException。处理上述物品可以解决您的问题
更新:
尝试以下代码
if (fileExtension.ToUpper() == ".JPG" || fileExtension.ToUpper() == ".PNG")
{
using (Bitmap bitmap = new Bitmap(filename)) // added using statement.
{
//DefaultCompressionJpeg(bitmap);
string fn = Path.GetFileNameWithoutExtension(filename);
//saadame lisaks ka extensioni, et saaksime lihtsamini faili ümber nimetada
VariousQuality(bitmap, fn, fileExtension, fileOriginalDate);
}
}
当您使用完实现IDisposable的每个对象时,您应该处理该对象。以下是程序中的一些一次性对象
Filestream ms,
Bitmap original,
EncoderParameter encoderParameter
当没有足够的内存继续执行程序时,将引发OutOfMemoryException。处理上述物品可以解决您的问题
更新:
尝试以下代码
if (fileExtension.ToUpper() == ".JPG" || fileExtension.ToUpper() == ".PNG")
{
using (Bitmap bitmap = new Bitmap(filename)) // added using statement.
{
//DefaultCompressionJpeg(bitmap);
string fn = Path.GetFileNameWithoutExtension(filename);
//saadame lisaks ka extensioni, et saaksime lihtsamini faili ümber nimetada
VariousQuality(bitmap, fn, fileExtension, fileOriginalDate);
}
}
如果要在第一个循环中中断,为什么还要使用
for
循环?OutOfMemoryException
可能来自FileStream
,它可能无法在每个转换过程中正确处理,因此在创建新实例时,现有实例仍在内存中可用,并耗尽了内存空间在FileStream
上使用语句可以解决这个问题。如果在第一个循环中中断,为什么还要使用for
循环?OutOfMemoryException
可能来自FileStream
,在每个转换过程中可能都没有正确处理,因此,在创建新实例时,现有实例在内存中仍然可用,并耗尽了内存空间使用FileStream
上的
语句可以解决此问题。更新了我的答案。我包括了一个using语句,它将在位图使用后处理位图。除此之外,GDI+还有一些已知问题,当它们实际上不存在时,将显示为OutOfMemoryException,例如:更新了我的答案。我包括一个using语句,它将在位图使用后处理位图。除此之外,GDI+还有一些已知问题,当它们实际上不存在时,将显示为OutOfMemoryException,例如: