Приложение для фотобудки my Net 4.0 Wpf, использующее Canon EDSDK Api, постепенно становилось непригодным для использования из-за постоянных ошибок нехватки памяти, таких как:
System.OutOfMemoryException: Out of memory. at System.Drawing.Image.FromStream(Stream stream, Boolean 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);
}
}
Любой совет будет очень признателен
Привет, да, я хотел бы знать, почему это происходит, и что нужно попытаться исправить.





какой твой вопрос? Вы хотите, почему это происходит, где ... и т. д.