Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Control mit transparentem Hintergrund neu zeichnen
d.gierse
myCSharp.de - Member



Dabei seit:
Beiträge: 116

Themenstarter:

Control mit transparentem Hintergrund neu zeichnen

beantworten | zitieren | melden

Hallo,

ich habe eine Panel so erweitert, das ich ein darin enthaltenes Bild um einen bestimmten Winkel drehen kann. Dazu speicher ich das eingestellte Hintergrundbild in einer lokalen Variable originalBitmap und überschreibe die OnPaint-Methode.
So lange ich den Winkel fest vorgebe ist alles in Ordnung.
Wenn ich den Winkel ändere bleibt aber das alte Bild stehen und das neue wird darüber gezeichnet.
Wie kann ich das verhindern ?

Hier mal der Code


        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT

                return cp;
            }
        }

        protected override void InitLayout()
        {
            originalBitmap = (Bitmap)this.BackgroundImage;
            base.InitLayout();
        }

        protected override void OnPaintBackground(PaintEventArgs pevent)
        {
            // Don't paint background
        }

        protected override void OnPaint(PaintEventArgs pe)
        {
            if (originalBitmap != null)
            {
                this.Size = new Size(originalBitmap.Height + originalBitmap.Width, originalBitmap.Height + originalBitmap.Width);
                Image image = originalBitmap;
                int heightOffset = originalBitmap.Width;
                double rotationRad = (rotation / 180) * Math.PI;
                Point[] destinationPoints = {

                    new Point(0 , heightOffset),   // destination for upper-left point of 
                      // original
                    new Point(Convert.ToInt16(Math.Cos(rotationRad) * image.Width) , 
                    heightOffset - Convert.ToInt16(Math.Sin(rotationRad) * image.Width)),  // destination for upper-right point of 
                      // original
                    new Point(Convert.ToInt16(Math.Sin(rotationRad) * image.Height), 
                        heightOffset + Convert.ToInt16(Math.Cos(rotationRad) * image.Height))
                };
                pe.Graphics.CopyFromScreen(10, 10, 0, 0, new Size(100, 100));
                pe.Graphics.DrawImage(image, destinationPoints);
            }

            base.OnPaint(pe);

        }
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von d.gierse am .
private Nachricht | Beiträge des Benutzers
Seraph2402
myCSharp.de - Member

Avatar #avatar-3197.jpg


Dabei seit:
Beiträge: 117
Herkunft: Hessen

beantworten | zitieren | melden

Hy d.gierse,

Versuch mal Graphics.Clear()


pe.Graphics.Clear(Color.Transparent);

mfg Seraph
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Seraph2402 am .
Ich beschütze das was am Wichtigsten ist!
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo d.gierse,
Zitat
Wenn ich den Winkel ändere bleibt aber das alte Bild stehen und das neue wird darüber gezeichnet.
ich würde mal sagen, das liegt an:
Zitat

protected override void OnPaintBackground(PaintEventArgs pevent)
{
   // Don't paint background
}
herbivore
private Nachricht | Beiträge des Benutzers