Entwickler-Ecke

WinForms - Ein Bild als Objekt von Form1 an Form2 übermitteln


kl.feigling - Fr 26.07.13 15:58
Titel: Ein Bild als Objekt von Form1 an Form2 übermitteln
Hallo, ich möchte gerne ein Bild, was ich von meiner Cam bekomme in eine Picturebox auf einer anderen Form ausgeben. Dies klappt auch beim ersten mal. Leider aktualisiert sich jedoch nicht das Bild. Was mach ich falsch ?

Form1:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
    
            try
            {
                if (ICube.ICubeSDK_SaveToFile(g_iCurrentCam, "Bild.bmp") != ICube.IC_SUCCESS)
                    MessageBox.Show("Error: ICubeSDK_SaveToFile");   //Bild wird aus Kamera geladen 

                Bitmap b1 = new Bitmap("Bild.bmp");  //Bild in speichern 

                form2.Id = b1;

                form2.aktualisieren(sender, e);
            }
            catch { }

    public partial class Form2 : Form
    {
        private Bitmap id;
        public Bitmap Id
        {
            get { return this.id; }
            set { this.id = value; }
        }

        public Form2()
        {
            InitializeComponent();
           
            pictureBox2.Load(Application.StartupPath+"\\"+"logo.png");
        }

        public void aktualisieren(object sender, EventArgs e)
        {
            if (this.pictureBox2.Image != null)
            {
                this.pictureBox2.Image.Dispose();
                this.pictureBox2.Image = null;
            }
            pictureBox2.Image = this.Id;

            this.pictureBox2.Refresh();
        }

Wenn ich jeweils das Bild auf die Festplatte speicher und dann öffne klappt es ... dauert aber leider sehr lange .
Hoffe ihr könnt mir Helfen :-)

Ps. Ist mein erstes Projekt in c# also totaler anfänger ...

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: Topic aus C# & .NET Tutorials verschoben am Fr 26.07.2013 um 16:34
Moderiert von user profile iconTh69: Titel geändert.


Th69 - Fr 26.07.13 16:43

Hallo kl.feigling :welcome:

hat deine Library evtl. noch eine andere Methode (z.B. SaveToStream), dann bräuchtest du nicht den Umweg über eine externe Datei gehen, sondern könntest direkt dein Bitmap aus dem Stream erstellen lassen?

Entferne aber ersteinmal den leeren try...catch, denn Exceptions sollte man nicht still einfach abfangen und dann im Programmablauf weitermachen. Evtl. wird die Datei nämlich gelockt, so daß das zweite Hineinschreiben (und alle folgenden) fehl schlägt und du daher keine Änderung in der PictureBox siehst?

P.S. Dein Beitrag war im falschen Forum (C# & .NET Tutorials), daher habe ich es nach C#-WinForms verschoben.
Und C#-Tags hinzugefügt, damit man den Code besser lesen kann - demnächst bitte selber so einstellen, danke.


kl.feigling - Di 30.07.13 11:50

Hallo, ich habe immer noch eine kleine Frage zu diesem Thema. Ich habe es jetzt geschaft, dass ich das aktuelle Bild als Bitmap an die form2 übergebe, leider aktuallisiert die Picturebox sich nicht :-( Was mache ich falsch? Zum Testen hab ich auch das Bild gespeichert und das klappt super.
Hoffe ihr könnt mir wieder einen kleinen Tipp geben.

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
        public Form2()
        {
            InitializeComponent();
      
        }

        public void aktualisieren(Bitmap bitmap)
        {
            Bitmap Bild_ausgabe = bitmap;
            if (this.pictureBox2.Image != null)
            {
                this.pictureBox2.Image.Dispose();
                this.pictureBox2.Image = null;
            }    
            pictureBox2.Image = Bild_ausgabe;
            this.pictureBox2.Refresh();
            Bild_ausgabe.Save(Application.StartupPath + "\\" + "ausgabe_test.png");    //Zum testen ob das Bild da ist
        }


Gruß Kl.feigling

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Th69 - Di 30.07.13 13:05

Hallo,

ich tippe darauf, daß du die GUI blockierst (s. z.B. myCSharp.de - Warum blockiert mein GUI? [http://www.mycsharp.de/wbb2/thread.php?threadid=27992]) und daher Windows nicht dazu kommt, die PictureBox zu aktualisieren.
In welcher Methode rufst du denn form2.aktualisieren(bitmap) auf?
Damit die GUI nicht blockiert, solltest du einen Timer verwenden (anstatt einer Schleife o.ä).