.png Image in Picturebox transparent draw'n

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    .png Image in Picturebox transparent draw'n

    Hey Leute,

    hab ein Problem...

    Ich hab eine Picturebox(pbBoden) mit einer Größe von "502; 363". in die soll ein Bild gedrawt werden(nicht Transparent). Darüber soll oben links mein .png Image gedrawt werden aber eben Transparent. Mit Pictureboxen geht es ja nicht transparent zu machen und deswegen will ich das Image direkt auf die pb drawen, aber wie ? ansätze hatte ich viele aber keiner davon hat den Background des .png files Transparent gemacht :(. Und ja mein Image hat kein Background, hab es transparent gemacht ^^

    kann mir jemand weiterhelfen ?

    Danke schonmal an alle!..


    MFG
    Peter
    okay ja das kann ich machen aber will das später über 10 Bilder auf der pb sind. und Dann will ich einige von den Grafiken auch noch animieren ^^ wäre also besser wenn ich die Drawn kann.

    würe es so machen:

    Bild = mein Bild
    pb = meine.pb
    pbLocation = pbBoden.Location

    und dann sagen draw mir mein Bild 20;20 und das Transparent ^^

    ist sowas möglich?

    MFG
    Peter
    In eine Bitmap kannst du auch mit Transparenz malen, aber mit deine viele Bildle + Animation wird das laggen.
    Weil einmal reingemaltes kann man nicht mehr raus-malen.
    Also musste jedesmal die Ziel-Bitmap komplett löschen, alle Bilder wieder neu übereinander reinmalen, und dann Picturebox.Invalidate() aufrufen, dass die PB sich auch neu zeichnet mit dem Bild.

    Du kannst dir das Image-Graphics sogar aufheben, in einer klassenweiten Variable - wird ja andauernd verwendet.
    Holen mit Picturebox1.Image.CreateGraphics

    nawiat schrieb:

    aber keiner davon hat den Background des .png files Transparent gemacht
    So was:

    VB.NET-Quellcode

    1. Dim bmp As New Bitmap(path)
    2. bmp.MakeTransparent(Color.Red)
    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!
    Ach ich glaub, ich denke mal wieder zu umständlich: auch in eine Picturebox kannst du Bildle malen mit Transparenz - soviel du wolle.
    Dann verabschiede dich von der Idee in Bitmapse zu malen, und male in Graphics.
    Das Graphics erhälst du im Picturebox_Paint-Event.

    Hier mal Beispiel:

    VB.NET-Quellcode

    1. Public Class frmOwnerDrawAutoScroll
    2. Private _rctRedCircle As New Rectangle(50, 50, 100, 100)
    3. Private _RedPen As New Pen(Color.Red, 3)
    4. Private _rctGreenEllipse As New Rectangle(70, 70, 100, 50)
    5. Private _TransparentGreenBrush As New SolidBrush(Color.FromArgb(80, 0, 255, 0))
    6. Private Sub Canvas_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Canvas.Paint
    7. Dim rct = _rctRedCircle
    8. rct.Offset(Canvas.AutoScrollPosition)
    9. rct.Size -= New Size(1, 1)
    10. e.Graphics.DrawEllipse(_RedPen, rct)
    11. rct = _rctGreenEllipse
    12. rct.Offset(Canvas.AutoScrollPosition)
    13. e.Graphics.FillEllipse(_TransparentGreenBrush, rct)
    14. End Sub
    15. Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    16. If e.KeyCode < Keys.Left OrElse e.KeyCode > Keys.Down Then Return 'nur Pfeiltasten berücksichtigen
    17. Canvas.Invalidate(_rctGreenEllipse) 'bisherige Figur neuzeichnen (löschen)
    18. Select Case e.KeyCode
    19. Case Keys.Left
    20. _rctGreenEllipse.X -= 5
    21. Case Keys.Right
    22. _rctGreenEllipse.X += 5
    23. Case Keys.Up
    24. _rctGreenEllipse.Y -= 5
    25. Case Keys.Down
    26. _rctGreenEllipse.Y += 5
    27. End Select
    28. Canvas.Invalidate(_rctGreenEllipse) 'an neuer Position neuzeichnen
    29. e.Handled = True
    30. End Sub
    31. End Class
    Das unterstützt sogar ein Scrollen des Controls, auf dem gemalt wird.
    Und Bewegung auf Tastendruck ist auch dabei
    Dateien

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Beim Durchlesen habe ich auch gedacht; MakeTransperant

    Zum Glück ist jemand schon drauf gekommen.

    nawiat schrieb:

    nicht mehr Transparent.
    2 Teile.
    1. musst Du im Bild die Transparenz erzeugen und
    2. musst Du der PictureBox die transparente Farbe mitteilen.
    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!
    @RodFromGermany
    haste da ein Beispiel ? und bist du dir da sicher das die pb dann wirklich transparent ist, das wäre das beste was mir passieren kann weil dann muss ich nicht alles neu schreiben wenn das mit einer pb geht ^^

    @ErfinderDesRades
    Jo ich hab mir dein Code durchgelsen aber hat in dem sinne ja nichts mit meiner pb zu tun auf der ich ein Bild erzeugen will. Du malst ja wie ich das sehe nur ein Kreis :thumbsup:
    Tja, dann wirds wohl überhaupt nix geben, was dir für deine Aufgabe was bringt.

    Ich hoffe doch, die Aufgabe richtig verstanden zu haben: "Mehrere Bitmaps, auch mit transparenten Farben, übereinander in eine Picturebox zeichnen."

    Mein Uppi zeichnet zwar nur ein Bild, aber er zeichnet es über eine anders erzeugte Figur, die aber ebensogut auch ein Bildle sein könnte.
    Warum nicht?
    Ich entpacke zips immer ausdrücklich mit WinRar, dabei kann keinesfalls geschehen, dass eine bösartig verborgene Exe darin gestartet wird.
    Selbstentpackende - nee, das öffne ich auch nicht, aber zips - kein Problem.
    Kannst du entpacken und studieren - wirst nur Sources finden - keine ausführbare Datei.
    Es hat keinen Sinn, über den vom Forum auskopierten Code zu reden - da fehlt ja, was im Designer gemacht worden ist. Im Form-Designer sähest du sofort, dass Canvas ein Panel ist.

    In meinem Code gibt es kein pbBoden, daher kannst du da garnix "sagen".

    Wie gesagt: du kannst es dir angucken, und auch damit rumspielen (etwa den Kreis durch die annere Bitmap ersetzen), und dann musste versuchen, das Gelernte auf dein Programm zu übertragen.

    Mein Code zeigt, wie man auf ein Panel namens "Canvas" zeichnet. Dein Part wäre, in gleicher Manier meinetwegen auf eine Picturebox namens "pbBoden" zu zeichnen.