Transparentes Bild über Hintergrundbild flackert bei Neupositionierung

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    Transparentes Bild über Hintergrundbild flackert bei Neupositionierung

    Ich habe eine PictureBox (picLogo) mit einem zugewiesenen Image. Darin befindet sich ein PNG mit transparentem Hintergrund.

    In einer zweiten (unsichtbaren) PictureBox (picBG) habe ich ein Hintergrundbild (ohne Transparenz), welches ich mit folgendem Code auf die Form zeichne:

    VB.NET-Quellcode

    1. Private Sub frmMain_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
    2. e.Graphics.DrawImage(picBG.Image, 0, 0)
    3. End Sub


    Jedes Mal, wenn ich nun picLogo in einer anderen Prozedur verschiebe (Left und Top), so blitzt an der alten Stelle immer kurz die BackColor der Form auf.

    Wieso ist das so bzw. wie kann ich das verhindern? Es ist übrigens unerheblich, ob ich die PictureBox vor dem Verschieben unsichtbar mache oder nicht.

    EDIT: War ganz einfach... DoubleBuffered = True bei der Form. ;)
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hi
    verwende besser keine unsichtbare PictureBox als Speicher für das Bild, sondern speichere sie in einer Variablen. Lege dazu eine private Variable vom Typ Image an und weise ihr das Bild zu. Wenn das Bild aus den Ressourcen kommt, kannst du es über My.Resources.DeinBild abrufen, bei Dateien einfach Image.FromFile aufrufen.

    Viele Grüße
    ~blaze~
    Man erstellt doch nicht ne Klasse, die dann ein Fenster erstellt, Speicher für diverse Daten belegt, Prozessorzeit belegt nur um ein Image zu verwenden. Ich kauf mir ja auch keinen Bilderrahmen, lass ein Foto drucken um mir dieses dann auf meinem Mobiltelefon anzugucken. Es ist doch viel einfach nur ein Image zu instanziieren.
    Die PictureBox ist tatsächlich eher zum Anzeigen von Bildern gedacht. Es hat eine Reihe von Vorteilen, das Bild direkt über Variablen anzusprechen:
    - Der GUI-Designer bleibt übersichtlich
    - Nur GUI-Klassen haben idR. einen Designer, der PictureBox unterstützt, weshalb dann keine Einheitlichkeit im Programm vorherrscht und man wissen muss, dass das so gelöst wurde
    - Die PictureBox benötigt selbst (vmtl. sogar verhältnismäßig einiges an) Speicher, der aber dann ungenutzt bleibt
    - Du benötigst ja nur die Funktionalität des Bildes, nicht die der PictureBox

    Insgesamt entspricht es auch eher den gängigen Konventionen, die sagen, wie ein Programm wohlgeformt wäre, aber ich denke, dass das bei Hobbyprojekten eher egal ist.

    Gibt es einen Grund, warum du es gerne über die PictureBox lösen würdest?

    Viele Grüße
    ~blaze~

    ~blaze~ schrieb:

    Gibt es einen Grund, warum du es gerne über die PictureBox lösen würdest?

    Unkenntnis über .NET. ;) Es handelte sich um mein allererstes .NET-Projekt überhaupt (und bisher einziges). Nun ist das Programm aber fertig und ich werde es daher nicht mehr verändern. Aber ich werde in Zukunft diesen Fehler nicht mehr begehen, versprochen. ;)

    Danke!
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum