Приложение .Net 4.0 WPF, использующее Canon EDSDK Api, обнаруживает большое количество ошибок нехватки памяти - PullRequest
0 голосов
/ 02 мая 2018

приложение для моей фотобудки Net 4.0 Wpf, использующее Canon EDSDK Api, постепенно перестало работать из-за постоянных ошибок нехватки памяти, таких как:

System.OutOfMemoryException: недостаточно памяти. в System.Drawing.Image.FromStream (Потоковый поток, логическое значение useEmbeddedColorManagement, Boolean validateImageData)

Часто случается, когда приложение захватывает и загружает изображение с камеры на компьютер, а затем пытается обрезать изображение до определенных размеров

Вот фрагмент, где происходят наиболее частые аварии:

private void MainCamera_DownloadReady(EOSDigital.API.Camera sender, EOSDigital.API.DownloadInfo Info)
    {
        try
        {
            Info.FileName = "CamPic.jpg";
            string dir = AppDomain.CurrentDomain.BaseDirectory;
            sender.DownloadFile(Info, dir); //Download image from camera to PC

            //Crop image to specific dimensions
            Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
            {
                PhotoObject ph;

                using (ImageFactory imf = new ImageFactory())
                {
                    imf.Load(AppDomain.CurrentDomain.BaseDirectory + @"\CamPic.jpg");
                    if (((WebcamImageVM)DataContext).IsPortrait)
                    {
                        imf.Crop(new System.Drawing.Rectangle(600, 0, 720, 1080));
                        ph = new PhotoObject(WebcamImageVM.GetBitmapSource(new Bitmap(imf.Image)), true);
                    }
                    else
                    {
                        imf.Crop(new System.Drawing.Rectangle(150, 0, 1620, 1080));
                        ph = new PhotoObject(WebcamImageVM.GetBitmapSource(new Bitmap(imf.Image)), false);
                    }
                }
            }));
        }
        catch (Exception ex)
        {
            Logger.LogEvent(EventType.Error, "Failed to take photo with DSLR: " + ex.Message);
        }
    }

Любой совет будет принята с благодарностью

...