[C#] Allgemeiner Fehler in GDI+

Hallo Leute,
Ich arbeite zur Zeit an einem Projekt um IrfanView-Befehle über eine externe Anwendung auszuführen, dass Problem ist wenn mehr als 1 Befehl ausgeführt wird kommt es zu der benannten Fehlermeldung.

Ich hoffe hier kann mir jemand helfen.

Hier habe ich ein kleines Projekt gemacht um dies zu veranschaulichen.

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;

namespace testBildbearbeitung
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void BildOeffnenbutton_Click(object sender, EventArgs e)
        {
            string bild;

            openFileDialog1.ShowDialog();

            bild = openFileDialog1.FileName.ToString();
	    
	    //Bild wird in PictureBox angezeigt
            pictureBox1.Image = Image.FromFile(bild);
        }

        private void Befehledurchlaufenbutton_Click(object sender, EventArgs e)
        {
            string pfad;	//Der Pfad wo IrfanView installiert ist
            string command;	//Der Befehl der über IrfanView abgewickelt werden soll
            bool success;
            FileStream fs1;
            Bitmap bearbeitungs_speicher = null;	//Die in der PictureBox geladene BitMap
            
	    //Die beiden Zwischenspeicher 1 und 2 werden, falls sie existieren gelöscht
	    //In Zwischenspeicher1 wird das aktuell geladene Bild der PictureBox gespeichert
	    //In Zwischenspeicher2 wird das durch IrfanView bearbeitete Bild gespeichert, welches dann wieder in die BitMap geladen wird

            if (File.Exists("C:\\zwischenspeicher1.jpg"))
                File.Delete("C:\\zwischenspeicher1.jpg");
            if (File.Exists("C:\\zwischenspeicher2.jpg"))
                File.Delete("C:\\zwischenspeicher2.jpg");
            
            pictureBox1.Image.Save("C:\\zwischenspeicher1.jpg");
            pfad = "C:\\Programme\\IrfanView\\i_view32.exe";
            command = "c:\\zwischenspeicher.jpg /gray /convert=c:\\zwischenspeicher2.jpg /silent";
            System.Diagnostics.Process.Start(pfad, command);
            do
            {
                success = true;
                try
                {
                    fs1 = new FileStream("C:\\zwischenspeicher2.jpg", FileMode.Open);
                    bearbeitungs_speicher = (Bitmap)Image.FromStream(fs1);
                    fs1.Close();
                    
                }
                catch (OutOfMemoryException)
                {
                    success = false;
                }
                catch (IOException)
                {
                    success = false;
                }

                if (!success) Thread.Sleep(100);

            } while (!success);

            pictureBox1.Image = bearbeitungs_speicher;

            //Bis hier hin funktioniert noch alles wie gehabt
	    
	    if (File.Exists("C:\\zwischenspeicher1.jpg"))
                File.Delete("C:\\zwischenspeicher1.jpg");
            if (File.Exists("C:\\zwischenspeicher2.jpg"))
                File.Delete("C:\\zwischenspeicher2.jpg");

	    //beim pictureBox1.Image.Save stürzt das Programm dann ab und meldet einen "Allgemeinen Fehler in GDI+"

            pictureBox1.Image.Save("C:\\zwischenspeicher1.jpg");

            
	    //hier würde dann ein anderer IrfanView Befehl behandelt werden
	    command = "c:\\zwischenspeicher.jpg /rotate_r /convert=c:\\zwischenspeicher2.jpg /silent";
            System.Diagnostics.Process.Start(pfad, command);
            do
            {
                success = true;
                try
                {
                    fs1 = new FileStream("C:\\zwischenspeicher2.jpg", FileMode.Open);
                    bearbeitungs_speicher = (Bitmap)Image.FromStream(fs1);
                    fs1.Close();

                }
                catch (OutOfMemoryException)
                {
                    success = false;
                }
                catch (IOException)
                {
                    success = false;
                }

                if (!success) Thread.Sleep(100);

            } while (!success);

            pictureBox1.Image = bearbeitungs_speicher;
            
        }
    }
}

Es ist von mir beabsichtigt dass die beiden IrfanView Befehle getrennt abgewickelt werden, nicht auf einmal.

Hier noch der Exception Text
Code:
System.Runtime.InteropServices.ExternalException wurde nicht behandelt.
  Message="Allgemeiner Fehler in GDI+."
  Source="System.Drawing"
  ErrorCode=-2147467259
  StackTrace:
       bei System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams)
       bei System.Drawing.Image.Save(String filename, ImageFormat format)
       bei System.Drawing.Image.Save(String filename)
       bei testBildbearbeitung.Form1.button2_Click(Object sender, EventArgs e) in G:\testIrfanView.cs:Zeile 86.
       bei System.Windows.Forms.Control.OnClick(EventArgs e)
       bei System.Windows.Forms.Button.OnClick(EventArgs e)
       bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       bei System.Windows.Forms.Control.WndProc(Message& m)
       bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
       bei System.Windows.Forms.Button.WndProc(Message& m)
       bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       bei System.Windows.Forms.Application.Run(Form mainForm)
       bei testBildbearbeitung.Program.Main() in C:\Dokumente und Einstellungen\Daniel\Eigene Dateien\testDA\testBildbearbeitung\testBildbearbeitung\Program.cs:Zeile 17.
       bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       bei System.Threading.ThreadHelper.ThreadStart()

mfg seppal
 
Zurück
Oben