Laden...

Image aus File füllen und neu abspeichern

Erstellt von Jelly vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.561 Views
J
Jelly Themenstarter:in
1.114 Beiträge seit 2007
vor 15 Jahren
Image aus File füllen und neu abspeichern

Dieser simple Code verursacht eine "Generic GDI+ Error" beim img.Save Aufruf, und ich hab keine Ahnung wie ich das umgehen kann:

string fileName = @"C:\Temp\MyScans\Merged.tif";

FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
Image img = Image.FromStream(stream);
stream.Close();
stream.Dispose();

System.IO.File.Delete(fileName);

img.Save(@"c:\temp\MyScans\Test.tif");

Sinn der Sache ist es, ein Image zurückzugeben über ein Event. Und wenn man dann diese Image speichern will, so schlägt das wegen besagter Fehlermeldung fehl.

Ich wills nicht verstehen. Das File.Delete klappt. Ein dirketes Zuordnen an eine PictureBox mittels myPicBox.Image = img; klappt auch. Aber das Speichern will nicht.

Und die Verweise hier im Forum nach "Generic GDI+ Error" haben mir auch nicht weitergeholfen...

Ich bin grad ein bischen ratlos?

J
Jelly Themenstarter:in
1.114 Beiträge seit 2007
vor 15 Jahren

Ok, so wie es aussieht liegt es am Image File selbst. Es handelt sich dabei nämlich um ein Tif Bild mit mehreren Seiten. Wie es scheint hat das Image Objekt Probleme dieses Format zu handeln, denn wenn ich mit einem normalem einfachen Bild probiere, dann klappt die Routine.

Ich werde mir also wohl alles in ein Stream legen um später damit zu arbeiten und eventuell als Datei abzulegen.

T
210 Beiträge seit 2006
vor 15 Jahren

Hallo Jelly,

der stream darf nicht geschlossen werden, denn dann 'funktioniert' das Image nicht mehr richtig. Bei kleinen Bildern klappt es manchmal. Wahrscheinlich weil es zwischengespeichert ist und kein Zugriff mehr auf den Stream erfolgt...
Bei großen Bildern gibt es aber Probleme, da dort immer wieder auf den Stream zugegriffen wird.

Gruß
T-Man

J
Jelly Themenstarter:in
1.114 Beiträge seit 2007
vor 15 Jahren

Habs jetzt umgestellt, so dass ich den Dateiinhalt in ein MemoryStream kopiere. Im Event kann ich dann damit anstellen was ich möchte. Die Datei wird nicht mehr benötigt.