Autor |
Beitrag |
John Sanson
Beiträge: 72
WinXP,WinVista
Delphi(BDS2006, 5), C#(VS2005, BDS2006), VB6
|
Verfasst: Sa 03.02.07 21:45
Hi,
ich habe eine Bilddatei in einer PictureBox geladen, hab diese bearbeitet und möchte die alte überschreiben.
Nun sagt der mir: Kein Dateizugriff. Ist auch verständlich warum aber wie kann ich das lösen?
Zuletzt bearbeitet von John Sanson am Sa 03.02.07 23:05, insgesamt 1-mal bearbeitet
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 03.02.07 21:55
Öhm ... What he says?
Ohne Quelltext zu sehen, kann man wohl wenig machen.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
John Sanson
Beiträge: 72
WinXP,WinVista
Delphi(BDS2006, 5), C#(VS2005, BDS2006), VB6
|
Verfasst: Sa 03.02.07 22:23
Titel: Code
Ja stimmt. Hier habe ich mal schnell einen ähnlichen Quelltext geschrieben, da mein richtiger zu umfangreich und unübersichtlich ist, deshalb habe ich auch keinen gepostet.
Ist aber der gleiche Ablauf:
-Bild in die Box laden
-Bearbeiten
-Wieder speichern
ohne löschen kommt die gleiche Fehlermeldeung.
Folgen Meldung erscheint:
Der Prozess kann nicht auf die Datei C:\Test.jpg zugreifen, da sie von einem anderen Prozess verwendet wird.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| private void button1_Click(object sender, EventArgs e) { pictureBox1.Image = Image.FromFile("C:\\Test.jpg"); Graphics g = Graphics.FromImage(pictureBox1.Image); g.DrawLine(new Pen(Color.Black, 5), 10, 10, 20, 20); pictureBox1.Invalidate(); System.IO.File.Delete("C:\\Test.jpg"); pictureBox1.Image.Save("C:\\Test.jpg"); } |
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 03.02.07 22:46
Hallo!
Laut der Doku ist das Speichern des Bildes in dieselbe Datei, aus der es geladen wurde, nicht möglich.
Doku: | Saving the image to the same file it was constructed from is not allowed and throws an exception. |
Ich habe das jetzt so gelöst, aber irgendwie finde ich das sehr unschön
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| private void button1_Click(object sender, EventArgs e) { Image im = Image.FromFile("E:\\IMG_6096.JPG"); pictureBox1.Image = new Bitmap(im); im.Dispose();
using(Graphics g = Graphics.FromImage(pictureBox1.Image)) { g.DrawLine(new Pen(Color.Black, 5), 10, 10, 20, 20); } pictureBox1.Invalidate(); pictureBox1.Image.Save("E:\\IMG_6096.JPG"); } |
Grüße
Christian
//edit: Ach ja, gib Deinen Thread bitte mal einen anderen Titel, der jetzige ist nicht so aussagekräftige.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
John Sanson
Beiträge: 72
WinXP,WinVista
Delphi(BDS2006, 5), C#(VS2005, BDS2006), VB6
|
Verfasst: Sa 03.02.07 23:06
dein Code läuft aber irgendwie schnall ich grad nicht was den Unterschied ausmacht.
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Sa 03.02.07 23:14
Ich lege in der zweiten Zeile eine Kopie des Bildes im Speicher an, um das ursprüngliche Bild freigeben zu können (dritte Zeile). Damit ist die Datei nicht mehr in Benutzung und man kann sie überschreiben.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
John Sanson
Beiträge: 72
WinXP,WinVista
Delphi(BDS2006, 5), C#(VS2005, BDS2006), VB6
|
Verfasst: Sa 03.02.07 23:19
Ahja alles klar. Diese Idee hatte ich auch.
pictureBox1.Image = new Bitmap("C:\\Test.jpg");
hat aber nicht so hingehauen.
Aufjedenfall danke werd ich direkt mal einbauen im Code.
|
|
|