Warum zeigt img.width in VB.NET 2003 für ein 1px breites, mit Image.FromStream geladenes Bild 15 an?

Antwort

Das von dir beschriebene Verhalten in VB.NET 2003, dass ein 1 px breites Bild nach dem Laden mit `Image.FromStream` plötzlich `img.Width = 15` ergibt, kann mehrere Ursachen haben. Hier sind die häufigsten Gründe: 1. **PNG-Metadaten oder DPI-Einstellungen** PNG-Bilder können DPI-Informationen (Dots Per Inch) enthalten. Die .NET GDI+ Bibliothek (System.Drawing) interpretiert diese DPI-Angaben manchmal falsch, besonders in älteren Versionen wie .NET 1.1 (Visual Studio 2003). Beispiel: Ein Bild mit 1 px Breite und 96 DPI kann bei einer fehlerhaften Interpretation als breiter angezeigt werden, weil GDI+ versucht, die physische Größe zu berücksichtigen. 2. **Defektes oder nicht unterstütztes PNG-Format** Manche PNGs, die mit bestimmten Tools erstellt wurden, enthalten ungewöhnliche Header oder Metadaten, die GDI+ nicht korrekt liest. Das kann dazu führen, dass die Bildgröße falsch ausgelesen wird. 3. **Stream-Handling** Wenn der Stream (`File.OpenRead`) nach dem Laden nicht korrekt geschlossen oder zurückgesetzt wird, kann es zu Problemen kommen. Allerdings ist das bei deinem Beispiel eher unwahrscheinlich, da `Image.FromStream` den Stream direkt liest. 4. **Fehler im .NET Framework 1.1** In .NET 1.1 (Visual Studio 2003) gab es einige Bugs im Umgang mit bestimmten Bildformaten, insbesondere PNG. Diese Bugs wurden in späteren Versionen behoben. **Was kannst du tun?** - Prüfe das Bild mit einem anderen Tool (z.B. IrfanView, GIMP), ob es wirklich 1 px breit ist. - Speichere das Bild ggf. neu ab, um fehlerhafte Metadaten zu entfernen. - Teste das Laden des Bildes in einer neueren .NET-Version, um zu sehen, ob das Problem weiterhin besteht. - Alternativ kannst du das Bild mit `Bitmap` statt `Image` laden, z.B.: ```vb.net Dim bmp As New Bitmap("bild.png") MsgBox(bmp.Width) ``` **Fazit:** Das Problem liegt sehr wahrscheinlich an der Art, wie GDI+ in .NET 1.1 PNG-Bilder und deren Metadaten interpretiert. In neueren .NET-Versionen tritt dieses Problem in der Regel nicht mehr auf. Weitere Infos: - [Microsoft: Image.FromStream Method](https://learn.microsoft.com/en-us/dotnet/api/system.drawing.image.fromstream) - [Stack Overflow: PNG width/height wrong in .NET](https://stackoverflow.com/questions/1162119/why-does-system-drawing-image-fromfile-return-the-wrong-width-and-height-for-png) Wenn du das Bild zur Verfügung stellst, kann man es genauer analysieren.

Frage stellen und sofort Antwort erhalten

Verwandte Fragen

Warum wird in VB.NET 2003 ein mit File.OpenRead geladenes Image mindestens 15 Pixel breit angezeigt, obwohl es nur 1 Pixel breit ist, und wie kann ich das ändern?

Das von dir beschriebene Verhalten liegt nicht an `File.OpenRead`, sondern an der Art und Weise, wie das Bild in einem Steuerelement (z. B. `PictureBox`) angezeigt wird. In Windows Forms (auch in VB.N... [mehr]

Was ist der Unterschied zwischen 'Image.FromFile' und 'File.OpenRead' in VB.NET 2003?

In VB.NET 2003 gibt es einen wichtigen Unterschied zwischen `Image.FromFile` und `File.OpenRead`: **1. `Image.FromFile`** - Gehört zur Klasse [`System.Drawing.Image`](https://learn.microsoft.c... [mehr]

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]