Allgemeiner GDI+ Fehler in Windows 7

Liebe/-r Experte/-in,
ich entwickle ein Programm in vb.net, das Bilder aus der Datenbank holt und diese auf der Festplatte abspeichert. Wenn ich die Bilder auf dem Windows Server 2008 speichere, habe ich keine Probleme, aber sobald ich das in Windows 7 mach, kommt „Allgemeiner Fehler in GDI+“. Wobei das nicht bei allen Bildern geschieht, nach meinen Beobachtungen nur bei TIFF-Format.

Hier der Code dazu:

Dim ms As IO.MemoryStream = New IO.MemoryStream(PufferImg)
Dim img As System.Drawing.Image = Image.FromStream(ms)
img.Save(sfd.FileName, img.RawFormat)

Ich hab das ganze Internet durchsucht, hab schon mit dem Schließen von MemoryStream und mit Übergabe von EncoderParameters versucht, bringt aber alles nichts.

Habt Ihr da vielleicht eine Lösung?
Ich danke euch im Voraus.

Hallo,

also, an welcher Stelle deines Codes kommt der Fehler?

Mach doch einfach mal nach jeder Codzeile eine MsgBox und gebe mir mal Bescheid welche MsgBox als letztes aufgin bevor der Fehler kam!

Dim ms As IO.MemoryStream = New IO.MemoryStream(PufferImg)
MsgBox(„1“)
Dim img As System.Drawing.Image = Image.FromStream(ms)
MsgBox(„2“)
img.Save(sfd.FileName, img.RawFormat)
MsgBox(„3“)

Ich glaube aber das etwas auf dem Server intsalliert ist das die Decodierung des Streams in ein Image unterstüzt (So etwas wie ein Codec)!

Hi,

das ist ein bissel „heikel“ Bilder in der DB abzulegen.
Wenn du dir das Bild in HEX anschaust wirste vermutlihc unterschiede feststellen.

MSSQL Server 2008 kann referenzen auf Dateien selbstständig verwalten. Das wäre meiner Ansicht nach der Bessere weg.
Du legst die Dateien dann einfach auf dem Dateisystem ab.

Grüße
Matze

Hallo Lilia,

der Fehler „Allgemeiner Fehler in GDI+“ tritt meistens dann auf, wenn die zu schreibende Datei (in deinem Fall sfd.FileName) nicht erzeugt werden kann, aus welchen Gründen auch immer.

Da ich aber davon ausgehe, dass das SaveFile Objekt ordnungsgemäß einen Dateinamen liefert, würde ich zu allererst das ganze in ein Try…Catch Block setzen, falls noch nicht geschehen, und einen Breakpoint in die Exception setzen. Dann schau dir die Exception (und die inner Exception) genauer an, dort wird in 99,9% der Fälle ersichtlich wieso jetzt hier ein Fehler aufgetreten ist.

Also in etwa so:

Try
Dim ms As IO.MemoryStream = New IO.MemoryStream(PufferImg)
Dim img As System.Drawing.Image = Image.FromStream(ms)
img.Save(sfd.FileName, img.RawFormat)
Catch ex as Exception
MessageBox.Show(„Exception“) ’

Schau mal hier:

http://social.msdn.microsoft.com/Forums/is/devdocs/t…