Kann ich in VB.NET 2003 mit 'File.OpenRead' ein Bild während der Anzeige in anderen Apps bearbeiten, während das mit 'Image.FromFile' nicht möglich ist?

Antwort

Deine Beobachtung ist korrekt und beruht auf dem Unterschied, wie die beiden Methoden mit Dateien umgehen: **`Image.FromFile`** Wenn du ein Bild mit `Image.FromFile("pfad")` lädst, bleibt die Datei **gesperrt**, solange das Image-Objekt nicht explizit freigegeben (z.B. durch `Dispose()`) wurde. Das bedeutet, andere Programme können die Datei währenddessen nicht bearbeiten oder überschreiben. Das liegt daran, dass `Image.FromFile` die Datei mit einem exklusiven Lesezugriff öffnet. **`File.OpenRead` + `Image.FromStream`** Wenn du stattdessen die Datei mit `File.OpenRead("pfad")` öffnest und dann das Bild mit `Image.FromStream(stream)` lädst, sieht das so aus: ```vb.net Dim fs As New FileStream("pfad", FileMode.Open, FileAccess.Read, FileShare.ReadWrite) Dim img As Image = Image.FromStream(fs) ``` Hier kannst du den FileStream so konfigurieren, dass andere Programme **gleichzeitig** auf die Datei zugreifen können (`FileShare.ReadWrite`). Das Bild wird aus dem Stream geladen, und solange du den Stream offen hältst, bleibt die Datei aber trotzdem belegt. **Wichtig:** Wenn du nach dem Laden des Bildes den Stream schließt, ist die Datei wieder freigegeben und kann von anderen Programmen bearbeitet werden. **Fazit:** - Mit `Image.FromFile` bleibt die Datei gesperrt, solange das Image-Objekt existiert. - Mit `File.OpenRead` und anschließendem Laden über `Image.FromStream` kannst du die Datei nach dem Laden sofort wieder freigeben, indem du den Stream schließt. Dann können andere Programme die Datei bearbeiten, während das Bild in deiner App angezeigt wird. **Tipp:** Wenn du maximale Flexibilität willst, lade das Bild mit `Image.FromStream`, **kopiere** das Image-Objekt (z.B. mit `img.Clone()`), und schließe dann den Stream. So ist das Bild in deiner App unabhängig von der Datei. **Beispiel:** ```vb.net Dim fs As New FileStream("pfad", FileMode.Open, FileAccess.Read, FileShare.ReadWrite) Dim img As Image = Image.FromStream(fs) Dim imgCopy As Image = CType(img.Clone(), Image) fs.Close() img.Dispose() ' imgCopy kannst du jetzt verwenden, die Datei ist freigegeben ``` **Weitere Infos:** - [Microsoft-Dokumentation zu Image.FromFile](https://learn.microsoft.com/en-us/dotnet/api/system.drawing.image.fromfile) - [Microsoft-Dokumentation zu Image.FromStream](https://learn.microsoft.com/en-us/dotnet/api/system.drawing.image.fromstream)

Frage stellen und sofort Antwort erhalten

Verwandte Fragen

Wie füge ich in VB.NET 2003 einen ListViewItem-Clone in ein existierendes ListViewItem einer zweiten ListView ein?

Um in VB.NET 2003 ein **ListViewItem** von einer ListView in eine andere zu kop, kannst du die `Clone()`Methode verwenden. Dabei wird ein, identisches ListViewItem erzeug, das du dann der zweiten List... [mehr]

Welche Funktion in VB.NET 2003 wandelt eine großgeschriebene Zeichenkette in eine kleingeschriebene mit großgeschriebenem ersten Buchstaben um?

In VB.NET 2003 kannst du dafür die Kombination aus `ToLower()` und `Substring()` verwenden, da es noch keine eingebaute Funktion wie `TextInfo.ToTitleCase` für einzelne Wörter gibt (die... [mehr]

Wie finde und selektiere ich in VB.NET 2003 bestimmte Einträge in einer TreeView?

Um in VB.NET 2003 bestimmte Einträge (Nodes) in einer TreeView zu finden und zu selektieren, gehst du typischerweise so vor: 1. **Durchlaufen der TreeView-Nodes** Da die TreeView eine hiera... [mehr]

Funktioniert in VB.NET 2003: Dim arr0(3) As Integer, arr1() As Integer = {1, 2, 3}; arr1.CopyTo(arr0, 3); MsgBox(arr0(2).ToString) zeigt '3'?

Dein Code in VB.NET 2003 funktioniert so nicht wie beschrieben. Hier die wichtigsten Punkte dazu: 1. **Array-Deklaration und Initialisierung** ```vb.net Dim arr0(3) As Integer Dim arr1() A... [mehr]

Wie kann man in VB.NET 2003 ein Array mit mehreren Werten initialisieren?

In VB.NET 2003 kannst du ein Array wie folgt mit Werten initialisieren: ```vb Dim arr(5) As Integer arr(0) = 1 arr(1) = 2 arr(2) = 3 arr(3) = 4 arr(4) = 5 arr(5) = 6 ``` Oder direkt bei der Deklarat... [mehr]

Ist in VB.NET 2003 me.AddOwnedForm(xxx) dasselbe wie xxx.Owner = me?

Nein, in VB.NET 2003 ist `Me.AddOwnedForm(xxx)` **nicht** dasselbe wie `xxx.Owner = Me`. **Unterschiede:** - `Me.AddOwnedForm(xxx)` Diese Methode fügt das Formular `xxx` zur Liste der von `... [mehr]

Wie verhindere ich in VB.NET 2003, dass eine Owner-Form beim Laden kurz sichtbar wird, obwohl ich sie mit Form.Hide oder Form.Visible = False öffne?

Das von dir beschriebene Problem tritt in VB.NET 2003 (Windows Forms) häufig auf, weil das Standardverhalten von Forms ist, beim Erstellen kurz sichtbar zu werden, bevor du sie verstecken kannst.... [mehr]

Bedeutet in VB.NET Form.Hide das gleiche wie Form.Show ohne Sichtbarkeit?

Nein, in VB.NET bedeuten `Form.Hide()` und `Form.Show()` nicht das Gleiche, auch nicht im Zusammenhang mit Sichtbarkeit. - `Form.Hide()` blendet das Formular aus, es bleibt aber im Speicher und l&aum... [mehr]

Kann ich mit VB.NET 2003 aus der Owner-Form eine Sub in einer geöffneten Owned-Form aufrufen?

Ja, das ist möglich. In VB.NET 2003 kannst du von der Owner-Form aus auf Methoden (Subs) einer Owned-Form zugreifen, sofern du eine Referenz auf die Instanz der Owned-Form hast und die Methode `P... [mehr]

Wie kann ich in VB.NET 2003 aus einer Ownerform Daten in einer geöffneten Ownedform ändern?

Um in VB.NET 2003 aus einer Owner-Form (Besitzer-Form) auf eine bereits geöffnete Owned-Form (besessene Form) zuzugreifen und deren Daten zu ändern, gehst du wie folgt vor: **1. OwnedForm r... [mehr]