Entwickler-Ecke

Multimedia / Grafik - Backgroundimage einer Picturebox nachladen


Rassi - Mo 22.02.10 14:09
Titel: Backgroundimage einer Picturebox nachladen
Hallo.
Ich möchte ein Backgroundimage nachladen (10 mal die Sekunde).
Nur leider wird immer nur das erste zugewiesene Bild angezeigt.
Muss ich das alte Backgroundimage irgendwie löschen?

Bisher rufe ich immer nur folgenden Befehl auf.

C#-Quelltext
1:
pictureBox1.BackgroundImage = m_Image;                    


Für die Image-Zuweisung der Picturebox funktioniert das auch.

C#-Quelltext
1:
pictureBox1.Image = m_Image;                    


Da wird das Bild immer aktuallisiert.

Gruß
Rasmus


danielf - Mo 22.02.10 15:18

Hallo,

ich meine man muss die Refresh-Methode noch aufrufen.

Gruß Daniel


Rassi - Mo 22.02.10 15:38

Hallo.

Ja, du hast recht. Nun wird das Bild neu aufgebaut.
Bringt mich leider nicht weiter (siehe http://www.c-sharp-forum.de/topic_Zeichnen+auf+Picturebox_97927.html )

Danke und Gruß
Rasmus


danielf - Mo 22.02.10 15:57

Also ich verstehe dein Problem nicht.

Ich habe gerade ein PictureBox "mainPB" gemacht. Über diese habe ich eine transparente PicutreBox "transparentPB" gelegt und ihre BackColor-Eigenschaft auf Transparenz sowie Parent = mainPB gelegt.


C#-Quelltext
1:
2:
transparentePB.BackColor = Color.Transparent;
            transparentePB.Parent = mainPB;


Der transparenten PictureBox weiße ich ein Bild mit einem Kreis zu:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
            Image i = new Bitmap(this.transparentePB.Width, this.transparentePB.Height);

            Graphics g = Graphics.FromImage(i);

            g.DrawPie(new Pen(Color.Red), new Rectangle(0,0this.transparentePB.Width - 5this.transparentePB.Height - 5), 0,360);

            this.transparentePB.Image = i;


In einem Timer lasse ich ein Image auf die mainPB zeichnen

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
        Random r = new Random();

        private delegate void DrawImageDelegate(Color c);

void t_Tick(object sender, EventArgs e)
        {
            this.BeginInvoke(
                new DrawImageDelegate(DrawImage),
                Color.FromArgb(r.Next(0255), r.Next(0255), r.Next(0255)));
        }

        private void DrawImage(Color c)
        {
            Image i = new Bitmap(this.mainPB.Width, this.mainPB.Height);

            Graphics g = Graphics.FromImage(i);

            g.FillRectangle(new SolidBrush(c), new Rectangle(0,0, i.Width, i.Height));

            this.mainPB.Image = i;
            this.mainPB.Refresh();
        }


Macht das was ich will ... ein Kreis ist immer über der bestimmten Position, während sich der "Hintergrund" verändert... So wie ich es im anderne Thread vermutet habe. Ist das nicht das was du willst?

Gruß Daniel