我有一台使用Emgucv Package拍照的相机,在我的代码的某些部分中拍照。 尝试保存Jpeg文件时,我在System.Drawing.dll中随机获得AccessViolationException。结果是我的Jpeg文件损坏了。
我的代码在Windows 10上运行,并使用Microsoft Visual Studio 2015编写。
这是我的代码,随机抛出一个异常:
public Boolean SavePhoto(Bitmap image)
{try
{
MyGate.LogCamera("Start Save Photo");
string photoTime = PersianDateTime.Now.ToString("HHmmss") + "_"
+ DateTime.Now.Millisecond;
String photoPath = System.IO.Path.Combine(Path.UserImagePath , PersianDateTime.Now.ToString("yyyyMMdd"));
if (System.IO.Directory.Exists(photoPath)==false)
{
System.IO.Directory.CreateDirectory(photoPath);
}
photoPath = System.IO.Path.Combine(photoPath, photoTime + ".jpg");
MyGate.LogCamera("Just Before Save Photo");
SaveJpeg(photoPath, image, 90);
MyGate.LogCamera("End Save Photo");
return true;
}
catch(Exception e)
{
new NDCBaseClass().LogError(e.ToString());
return false;
}
}
public void SaveJpeg(string path, Image img, int quality)
{
try
{
// Encoder parameter for image quality
EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
// JPEG image codec
ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg");
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = qualityParam;
img.Save(path, jpegCodec, encoderParams);
}
catch(Exception e)
{
new NDCBaseClass().LogError(e.ToString());
}
}
答案 0 :(得分:-1)
在img.save方法之后调用GC.Collect解决了该问题。