Laden...

Flackern beim Zoomen einer PictureBox

Erstellt von el_vital vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.869 Views
E
el_vital Themenstarter:in
346 Beiträge seit 2007
vor 12 Jahren
Flackern beim Zoomen einer PictureBox

Ich habe die wichtigsten Themen zu dem Flackern eines Controls durchgelesen und schon alles durchprobiert, aber ich bekomme eine PictureBox nicht ohne Flackern vergrößert bzw. verkleinert.

Die PictureBox ist in einem Panel, beinhaltet ein Bild und SizeMode ist auf Zoom eingestellt. Die Größe wird über eine TrackBar mit diesem Code verändert:


   private void trackBar1_ValueChanged(object sender, EventArgs e)
        {
            pictureBox.SuspendLayout();

            int TempVar = 0;

            TempVar = trackBar1.Value - pictureBox.Height;

            if (TempVar < 0)
            {
                TempVar = TempVar * -1;
                if ((pictureBox.Width - TempVar) >= 50)
                {
                    pictureBox.Size = new System.Drawing.Size(pictureBox.Width - TempVar, trackBar1.Value);
                    pictureBox.Location = new System.Drawing.Point((int)Math.Round(pictureBox.Location.X + TempVar / 2f), (int)Math.Round(pictureBox.Location.Y + TempVar / 2f));  //--- Position des Vorschaubildes
                }
                else
                    return;
            }
            else
            {
                pictureBox.Size = new System.Drawing.Size(pictureBox.Width + TempVar, trackBar1.Value);
                pictureBox.Location = new System.Drawing.Point((int)Math.Round(pictureBox.Location.X - TempVar / 2f), (int)Math.Round(pictureBox.Location.Y - TempVar / 2f));  //--- Position des Vorschaubildes
            }

            pictureBox.ResumeLayout();
        }

Könnt ihr mir noch ein paar Tipps geben? Es flackert wenn die Ränder des Bildes zu sehen sind. Also wenn das Bild relativ klein ist.

Danke im Voraus.

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo el_vital,

und du bist dir ganz sicher, dass DoubleBuffered der PictureBox eingeschaltet ist?

herbivore

E
el_vital Themenstarter:in
346 Beiträge seit 2007
vor 12 Jahren

Hallo herbivore,

ich habe die PictureBox dafür extra abgeleitet:


   class myPictureBox : PictureBox
    {
        public myPictureBox()
        {
            this.SetStyle(

              ControlStyles.AllPaintingInWmPaint |

              ControlStyles.UserPaint |

              ControlStyles.DoubleBuffer, true);

        }
    }

Oder ist es so falsch?

E
el_vital Themenstarter:in
346 Beiträge seit 2007
vor 12 Jahren

oh, ich habe gerade eine Lösung gefunden. Wenn ich die pictureBox in eine weitere Picturebox anstatt eines Panels packe, dann gibt es diese Probleme nicht. Schade, dass eine Picturebox nicht in dem Designer Child-Elemente aufnehmen kann.

Nachtrag: das geht auch mit einem Panel. Also Panel ableiten, DoubleBuffer Style zuweisen und dieses Panel als Untergrund verwenden.