Autor Beitrag
John Sanson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72

WinXP,WinVista
Delphi(BDS2006, 5), C#(VS2005, BDS2006), VB6
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 03.02.07 21:55 
Öhm ... What he says? :gruebel:

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72

WinXP,WinVista
Delphi(BDS2006, 5), C#(VS2005, BDS2006), VB6
BeitragVerfasst: 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.

ausblenden 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), 10102020);
            pictureBox1.Invalidate();
            
            System.IO.File.Delete("C:\\Test.jpg");
            pictureBox1.Image.Save("C:\\Test.jpg");
        }
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 :gruebel:

ausblenden 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), 10102020);
            }
            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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72

WinXP,WinVista
Delphi(BDS2006, 5), C#(VS2005, BDS2006), VB6
BeitragVerfasst: Sa 03.02.07 23:06 
dein Code läuft aber irgendwie schnall ich grad nicht was den Unterschied ausmacht.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 72

WinXP,WinVista
Delphi(BDS2006, 5), C#(VS2005, BDS2006), VB6
BeitragVerfasst: 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.