Ich entwickle eine Anwendung, die ein mobiles Gerät verwendet, um ein Foto zu machen und es über einen Webservice zu senden. Aber nachdem ich 4 Fotos gemacht habe, bekomme ich einen OutOfMemoryException
im folgenden Code. Ich habe versucht, GC.Collect()
anzurufen, aber es half auch nicht. Vielleicht könnte jemand hier einen Rat geben, wie man mit diesem Problem umgeht.OutOfMemoryException auf mobilem Gerät
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;
}
Die Funktion wird von einem Event-Handler aufgerufen wird:
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);
}
Ich würde Ihren Code leicht ändern - wo es das Bild picturebox setzt, würde ich jedes vorhandene Bild zuerst, a la Wenn (_pictureBox.Image! = Null) _pictureBox.Image.Dispose(). – ctacke