保存jpeg时访问System.Drawing.dll中的访问冲突异常

时间:2019-01-29 11:54:42

标签: c#

我有一台使用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());
        }
    }

1 个答案:

答案 0 :(得分:-1)

在img.save方法之后调用GC.Collect解决了该问题。