Bild freigeben für weitere/erneute Bearbeitung

Horstl

Grünschnabel
Hallo an alle,

ich bräuchte einen Ratschlag von euch. So schauts aus bei mir:

Ich habe eine PictureBox die es mir ermöglicht, per Drag & drop ein Bild anzuzeigen:
Code:
private void tabPage2_DragDrop(object sender, DragEventArgs e)
        {
            try
            {
                // If we drop a file try and load it into the image box
                if (e.Data.GetDataPresent(DataFormats.FileDrop))
                {
                    
                    // Get the file path of the file and load it
                    string[] filepath = (string[])e.Data.GetData(DataFormats.FileDrop);
                    // abspeichern des pfades, für später
                    this.tempImagePath = filepath[0];

                    picboxCardImage.Image = Image.FromFile(filepath[0]);
                }
            }
            catch (Exception exc) { Console.WriteLine(exc.Message);  }
        }

private void tabPage2_DragOver(object sender, DragEventArgs e)
        {
           
            
            // Check to see if the drag event contains a file data type,
            // i.e., that we are dragging a file. Ignore all other drages.
            if (e.Data.GetDataPresent(DataFormats.FileDrop) ||
                    e.Data.GetDataPresent(DataFormats.Text))
            {
                // Change the feedback (the effect) to show that this drag is allowable
                if ((e.AllowedEffect & DragDropEffects.Move) != 0)
                    e.Effect = DragDropEffects.Move;
            }
           
        }

Daneben hab ich eine ListBox, die es mir ermöglicht zwischen verschiedenen Zeilen, die Bilder zu ändern. Ihr könnt euch das vorstellen wie eine Art Gallery:

Code:
 if (temp.CardImageFilePath != null)
                {
                    picboxCardImage.Image = Image.FromFile(temp.CardImageFilePath);
                }

von wo das Temp kommt is ned so wichtig im Moment. Dieses If ist ein Auszug von meinem Ereignis der listBox.

Jetzt zum Problem: Wenn ich jetzt z.B. mit diesen Zeilen durch einen Buttonclick ...
Code:
   FileInfo fileInfo = new FileInfo(fileName);
            FileStream fileStream = new FileStream(fileName, FileMode.Open);
            BinaryReader binaryReader = new BinaryReader(fileStream);
            byte[] data = binaryReader.ReadBytes((int)fileInfo.Length);

... mein Bild als byte[] data haben will, wird verständlicherweise gejammert, File schon in Benutzung usw. Aber ich hab keine Ahnung wo ich irgendwo mein Bild/Stream/File (was auch immer) closen kann. Damit ich wieder darauf zugreifen kann ...

ist jetzt immer das Bild das aktuell angezeigt wird in meiner Picturebox nicht mehr verwendbar? Kennt da wär was?

lg und noch eine schöne Nacht ^^
 
Hallo

Du musst das Bild anders einlesen, dann wird es nicht blockiert.

Beispiel:
Code:
Dim oStream As New System.IO.FileStream("d:\bild1.gif", IO.FileMode.Open)
PictureBox1.Image = New Bitmap(oStream)
oStream.Close()
 
klappt leider nicht, weil das bild irgendwie/wo schon in der Funktion tabPage2_DragOver, tabPage2_DragDrop geöffnet worden wird und ich da nicht weiß wie/wo ich wieder ein close machen soll.

selbst wenn ich jetzt mein Ereignis umänder auf:
Code:
                if (temp.CardImageFilePath != null)
                {
                    //picboxCardImage.Image = Image.FromFile(temp.CardImageFilePath);

                    System.IO.FileStream stream = new System.IO.FileStream(temp.CardImageFilePath, System.IO.FileMode.Open);
                    picboxCardImage.Image = new Bitmap(stream);
                    stream.Close();
                }

hängt er sich da schon auf, weil die Datei schon offen ist.

Weitere Ideen?


Update:
Zu früh geschrieben, habs jetzt auch in der anderen Funktion geändert, da übersehen! und jetzt funktionierts!

Ausgezeichnet, herzlichen Dank
 
Zuletzt bearbeitet:
Zurück