Transparente Grafiken übereinander setzten und zueinander bewegen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Transparente Grafiken übereinander setzten und zueinander bewegen

    Guten Tag,

    ich such jetzt schon eine ganze weile, aber ich finde nicht das passende zu meinem Problem. Ich hoffe ich habe jetzt den Beitrag ins richtige Unterforum gestellt.

    Ich soll externen Signalen (Messwerte) grafisch Darstellen, wie ich diese einlese usw. weis ich und habe sie auch schon als Text angezeigt. Jetzt sollen mit diesen Werten Grafiken verschoben werden, diese Grafiken sind teilweise transparent und werden auch übereinander geschoben (Die Grafiken stellen eine Gerät dar, auf dem sich verschiedene Teile verschieben).

    Ich habe das jetzt schon versucht mit PictureBox zu lösen, aber da gibt es ja das Problem, dass sobald eine Transparenz angegeben wird, immer der Hintergrund angezeigt wird und nicht die darunter liegenden PictureBox.

    Ich habe auch schon versucht, dass mit Graphics.DrawImage zu lösen -- Die Grafiken damit zu Zeichnen habe ich auch schon hin bekommen. Und beim Übereinanderlegen stimmen auch die transparenten Bereiche, so dass die darunterliegenden Grafik angezeigt wird. -- Nur schaffe ich das verschieben hier nicht!!

    1. Wie kann ich auf diese Grafiken zugreifen damit ich sie über meine Messwerte verschieben kann?

    2. Habe schon mit Invalidate() versucht neu zu Zeichnen, aber da blinkt kurz der leere Hintergrund auf bevor das neue Bild erscheint - kann man das Aufblinken unterbinden?
    Danke das war die Lösung, jetzt schaffe ich eine schöne ruckelfreihe Bewegung der Grafiken. :)

    Vielen Dank!

    Quellcode

    1. Public Class Anzeige
    2. Dim Bild_1 As Image = Image.FromFile("Bild 1.png")
    3. Dim Bild_2 As Image = Image.FromFile("Bild 2.png")
    4. Dim Bild_1X As Int16 = 50
    5. Dim Bild_1Y As Int16 = 50
    6. Dim Bild_2X As Int16 = 100
    7. Dim Bild_2Y As Int16 = 100
    8. Private TDx As New TDxInput.Device 'Für 3D Maus (ersatzweiser Input da Messhartware nicht ständig zur Verfügung)
    9. Private Sub form1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles MyBase.Paint
    10. DoubleBuffered = True
    11. e.Graphics.DrawImage(Bild_1, Bild_1X, Bild_1Y)
    12. e.Graphics.DrawImage(Bild_2, Bild_2X, Bild_2Y)
    13. End Sub
    14. Private Sub Timer3DMaus1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3DMaus1.Tick
    15. Bild_2X = Bild_2X + TDx.Sensor.Rotation.Z * TDx.Sensor.Rotation.Angle * 0.1
    16. Invalidate()
    17. End Sub
    18. End Class

    beinem großen Form ist das sehr unwirtschaftlich, für so kleine Grafiken immer das ganze Form zu invalidieren.
    Aber ein Problem mit der maximalen Bewegungs-Geschwindigkeit haste garnet, odr?
    Sonst könnte man da schön optimieren, indem man immer nur die Bereiche invalidiert, die auch neu zu zeichnen sind - die grosse annere Fläche nicht.
    @Markus_78 Poste mal nen Screenshot von zwei verschiedenen Zuständen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!