2009-05-08 7 views
1

Bonjour J'essaie de sauvegarder une image bitmap dans un programme d'édition d'image de base.Écrasement d'un fichier image (bitmap)

Voici le code:

  // then save it 
     ImageBoxInApp.Image.Save(filename); 

[EDIT] Et j'ouvre l'image avec ce

openFileDialog1.Title = "Select an Image"; 
     openFileDialog1.Filter = "All Files|*.*|Windows Bitmaps|*.bmp|JPEG Files|*.jpg"; 
     if (openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      filename = openFileDialog1.FileName; 
      Image img = System.Drawing.Image.FromFile(filename); 

Alors, quand je tente ce que je reçois un . Donc, j'ai trouvé un solution à cela et il ressemble à ceci:

 // Delete existing file first 
     System.IO.File.Delete(filename); 
     // then save it 
     ImageBoxInApp.Image.Save(filename); 

Mais lorsque je tente de faire, je reçois une autre erreur indiquant que le fichier je supprime est actuellement ouvert. C'est parce que c'est le fichier que j'essaie de modifier. Comment puis-je "fermer" le fichier sans fermer réellement l'application? Ou existe-t-il une solution alternative?

Merci!

Répondre

1

Il est difficile de dire sans voir un peu de contexte autour de la façon dont votre chargement du fichier, mais voici quelques suggestions:

  1. Avant d'enregistrer, copier l'image existante dans une nouvelle image, fermez l'original, effectuer Supprimez et enregistrez la copie.
  2. Enregistrez le fichier dans un nom de fichier aléatoire, supprimez l'original, renommez le fichier nommé aléatoirement par son nom d'origine.
  3. Chargez le fichier dans un flux de mémoire et utilisez la copie en mémoire pour initialiser l'image.

Je choisirais personnellement l'option 3 pour la plupart des cas. Assurez-vous de disposer de l'image lorsque vous avez fini de l'utiliser - il est préférable de l'envelopper dans un bloc using().

+0

4. au lieu de créer une image à partir d'un nom de fichier, créez une image à partir d'un flux créé à partir du nom de fichier et fermez le flux après avoir créé Image (avec le bloc using() de préférence). Cela a fonctionné pour moi et me semble meilleur. – sluki

Questions connexes