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

Ist in VB.NET 2003 bei der Umwandlung mit CInt(True) das Ergebnis -1 und bei CInt(False) das Ergebnis 0?

In VB.NET 2003 (also Visual Basic .NET 1.1) gilt Folgendes: - Der Ausdruck `CInt(True)` ergibt **-1**. - Der Ausdruck `CInt(False)` ergibt **0**. Das liegt daran, dass in VB.NET (wie auch in klassis... [mehr]

Wie ermittelt man in VB.NET 2003 die TransparentColor beim Extrahieren eines Icons mit SHGetFileInfo?

In VB.NET 2003 gibt es keine direkte Möglichkeit, die Transparenzfarbe (TransparentColor) eines Icons zu ermitteln, das mit `SHGetFileInfo` extrahiert wurde, da das von `SHGetFileInfo` zurüc... [mehr]

Wie wählt man in VB.NET 2003 per Code eine KnownColor aus?

In VB.NET 2003 kannst du eine Farbe aus der Aufzählung `KnownColor` auswählen und daraus ein `Color`-Objekt erstellen. Das geht so: ```vb.net Dim meineFarbe As Color meineFarbe = Color.From... [mehr]

Welchen Einfluss haben überflüssig importierte Klassen mittels Imports in VB.NET 2003 auf ein Programm?

In VB.NET 2003 (also .NET Framework 1.1) hat das Hinzufügen von Imports-Anweisungen für nicht verwendete Namespaces oder Klassen in der Regel **keinen nennenswerten Einfluss auf die Grö... [mehr]

Können in VB.NET 2003 außer Icons auch GIF/PNG für ownerdrawn Contextmenüs verwendet werden?

In **VB.NET 2003** (also .NET Framework 1.1) ist die Unterstützung für Bilder in Menüs standardmäßig auf **Icons** (also `.ico`-Dateien) beschränkt. Das betrifft sowohl... [mehr]

"if shinfo.hicon <> IntPtr.Zero Then ..." verursacht in VB.NET 2003 einen Fehler?

Ja, in **VB.NET 2003** kann folgender Vergleich zu einem Fehler führen: ```vb If shinfo.hIcon <> IntPtr.Zero Then ' ... End If ``` **Grund:** In VB.NET 2003 (also .NET Framewor... [mehr]

Wie speichere ich in VB.NET 2003 ein mit SHGetFileInfo extrahiertes Icon unter einem anderen Namen?

Um ein mit `SHGetFileInfo` extrahiertes Icon in VB.NET 2003 unter einem anderen Namen zu speichern, gehst du wie folgt vor: 1. **Icon extrahieren:** Mit `SHGetFileInfo` erhältst du einen Handle... [mehr]

Wie kann ich in VB.NET 2003 den Fehler 'Der Vorgang "read" konnte nicht auf dem Speicher...' abfangen?

Der Fehler „Der Vorgang 'read' konnte nicht auf dem Speicher...“ ist kein typischer .NET-Fehler, sondern ein Zugriffsverletzungsfehler (Access Violation), der meist auftritt, wen... [mehr]

Wie kann ich in VB.NET 2003 einem Contextmenü Icons hinzufügen?

In **VB.NET 2003** (Visual Studio .NET 2003) gibt es für das Standard-`ContextMenu`-Steuerelement keine direkte Unterstützung für Icons neben den Menüeinträgen. Das Hinzuf&uum... [mehr]

Welchen Datentyp hat der Wert für PictureBox.SizeMode in VB.NET 2003?

Der Wert für die Eigenschaft `PictureBox.SizeMode` in VB.NET 2003 hat den Datentyp [`PictureBoxSizeMode`](https://learn.microsoft.com/de-de/dotnet/api/system.windows.forms.pictureboxsizemode?view... [mehr]