Hintergrund einer PictureBox soll transparent werden

  • VB.NET
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von dj alex z.

    Hintergrund einer PictureBox soll transparent werden

    Hallo zusammen,

    ich habe ein kleines Tool geschrieben um Senderlogos von Fernsehsendern von PNG in Base64 Code umzuwandeln und diese so auf dem Webinterface meines Satreceivers anzeigen zu lassen.
    So weit, so gut.
    Nun zu meinem Problem:
    Die Logos für das Webinterface müssen 100x60 Pixel haben.
    Ich habe auf meiner Form eine PictureBox mit den Maßen 100x60.
    Das Bild, dass ich darin lade wird per
    Größenmodus: Zoom auch angepasst und angezeigt.
    Hier ein Beispiel für RTL HD:



    So sieht das Bild in der PictureBox aus.

    Jetzt möchte ich das Bild exakt so als PNG Datei speichern.
    Wenn ich einfach per

    VB.NET-Quellcode

    1. Me.PictureBox5.Image.Save("Datei", System.Drawing.Imaging.ImageFormat.Png)
    speichere, wird mir das Bild in der vollen Originalgröße (720x120) gespeichert.
    Möchte aber ja quasi eine 1:1 Kopie der PictureBox als PNG speichern.

    Habe jetzt nach jeder Menge Google folgende Code gefunden:

    VB.NET-Quellcode

    1. Dim bmp As New Bitmap(Me.PictureBox2.Image, Me.PictureBox2.Width, Me.PictureBox2.Height)
    2. bmp.MakeTransparent(System.Drawing.SystemColors.ActiveCaption)
    3. Me.PictureBox2.DrawToBitmap(bmp, Me.PictureBox2.ClientRectangle)
    4. Me.PictureBox5.Image = bmp
    5. Me.PictureBox5.Image.Save("Datei", System.Drawing.Imaging.ImageFormat.Png)


    Hier wird mit einer zweiten PictureBox gearbeitet und es wird wie von mir gewünscht die oben angezeigte PictureBox als PNG gespeichert.

    Ich bekomme es aber einfach nicht hin, dass der Hintergrund dieses PNGs nicht weiß sondern transparent wird.
    Folgendes habe ich bereits probiert:

    VB.NET-Quellcode

    1. bmp.MakeTransparent(System.Drawing.SystemColors.ActiveCaption)


    Damit wird kein weißer Hintergrund gespeichert, sondern der Hintergrund meiner Form.
    Es bringt auch nichts, wenn ich die Hintergründe der beiden PictureBoxen transparent mache.

    Bitte helft mir.

    Vielen Dank im Voraus

    LG

    DJ Alex Z


    Edit:

    Habe jetzt einen Weg gefunden, wie ich den Hintergrund transparent machen kann.
    Denke aber, dass es mit Sicherheit noch besser bzw. einfacher geht.

    Ich lade die oben erstellte PNG mit dem weißen Hintergrun und den richtigen Maßen nochmals in eine Bitmap und mache die Farbe Weiß transparent:

    VB.NET-Quellcode

    1. ​Dim bitmap As New Bitmap("Datei-mit-dem-Bild-mit-weißem-hintergrund.png")
    2. bitmap.MakeTransparent(Color.White)
    3. bitmap.Save("neues-Bild.png")



    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „dj alex z“ ()

    @dj alex z Willkommen im Forum. :thumbup:
    So funktioniert dies:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim bmp = New Bitmap("C:\Temp\rtl-test-mitgre8mjqg.png")
    3. Dim col = bmp.GetPixel(0, 0) ' Farbe an einer Position auslesen, die transparent werden soll
    4. bmp.MakeTransparent(col)
    5. Me.PictureBox1.Image = bmp
    6. End Sub

    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!
    @dj alex z Wenn das öfter aufgerufen werden sollte, ist es besser, vorher das vorhandene Image der PictureBox zu disposen:

    VB.NET-Quellcode

    1. If Me.PictureBox1.Image IsNot Nothing Then
    2. Me.PictureBox1.Image.Dispose()
    3. End If
    4. Me.PictureBox1.Image = bmp
    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!