Je développe une application qui utilise un périphérique mobile pour prendre une photo et l'envoyer à l'aide d'un service Web. Mais après avoir pris 4 photos, j'obtiens un OutOfMemoryException
dans le code ci-dessous. J'ai essayé d'appeler GC.Collect()
mais cela n'a pas aidé non plus. Peut-être que quelqu'un ici pourrait me donner un conseil sur la façon de gérer ce problème.OutOfMemoryException sur le périphérique mobile
public static Bitmap TakePicture()
{
var dialog = new CameraCaptureDialog
{
Resolution = new Size(1600, 1200),
StillQuality = CameraCaptureStillQuality.Default
};
dialog.ShowDialog();
// If the filename is empty the user took no picture
if (string.IsNullOrEmpty(dialog.FileName))
return null;
// (!) The OutOfMemoryException is thrown here (!)
var bitmap = new Bitmap(dialog.FileName);
File.Delete(dialog.FileName);
return bitmap;
}
La fonction est appelée par un gestionnaire d'événements:
private void _pictureBox_Click(object sender, EventArgs e)
{
_takePictureLinkLabel.Visible = false;
var image = Camera.TakePicture();
if (image == null)
return;
image = Camera.CutBitmap(image, 2.5);
_pictureBox.Image = image;
_image = Camera.ImageToByteArray(image);
}
Je modifierais légèrement votre code - où il définit l'image de la zone d'image, je disposerais de toute image existante d'abord, un si la (_pictureBox.Image! = Null) _pictureBox.Image.Dispose(). – ctacke