Problem mit Halb-Transparenz

  • Allgemein

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    Problem mit Halb-Transparenz

    Hey Com
    Ich hab ein Problem mit der Transparenz meiner Form.
    Ich habe mir in Photoshop ein eigenes "GUI" entworfen, was ich als .PNG speichere, damit es transparent ist.
    Das Problem bei Photoshop ist, dass es das Bild nicht exakt so speichert, wie ich es gemalt habe, sondern in der .png Version am Rand so leicht transparente Pixel sind, die in Photoshop selbst komplett transparent sind, also nicht vorhanden. Das führt zu Problemen mit dem GUI.

    Meine Einstellungen:
    BackgroundImage = MeinGUI.png
    FormBorderStyle = None
    TransparencyKey = [...]-Green (weiß ich nicht genau, ist auch unwichtig)
    BackgroundColor = î selbe Farbe wie TransparencyKey

    Das Ergebnis:
    Die halbtransparenten Pixel werden grün :(
    Screenshot:


    Original:



    Die Bildschirmlupe von Microsoft scheint das jedoch zu können.
    Screenshot:


    Habt ihr eine Lösung dazu?
    Wär sehr cool..
    Jaa.. bei einer Lösungssuche hab ich in das Thema WPF auch schon einen Blick geworfen..
    Sah irgendwie kompliziert aus.. :<

    Komisch ist nur, dass es im Visual Studio 2005 funktioniert hat.. Warum haben sie das nur rausgenommen..

    Ich schau nochmal nach WPF, wenn das hier die einfachste Lösung ist..
    Wenn du BackgroundColor den Wert Nothing verpasst, sollte das Programm eigentlich ne Exception werfen.
    Wenn du NACH der Zuweisung von BackgroundColor noch den TransparencyKey auf BackgroundColor setzt, ergibt das noch viel weniger Sinn. ^^
    Hm.. bisher leider alles nicht problemlösend..
    Hat vielleicht jemand ein besseres Bildbearbeitungsprogramm als Adobe Photoshop CS5, was dann keine halb transparenten Pixel auf das Bild klatscht?
    Oder liegt das an dem .png-Format, dass das nicht besser gespeichert werden kann..?
    .gif gibt ne noch schlechtere Qualität..
    Danke danke danke :)

    Hab ich das? :D
    Ich hab das Füllwerkzeug mit der Standart-Schwarz-Farbe genommen, und dann mit dem Auswahltool was gelöscht, und dann in der Farbauswahl irgendeine andere Farbe ausgewählt..
    Am Alphawert selbst hab ich aktiv nichts umgestellt, dann muss das wohl dabei passiert sein..

    Wo finde ich denn diese Zahl, die du korrigiert hast?
    Antialiasing raus^^, bzw. im Nachhinein einfach den Schwellwert entsprechend verändern...
    Per WinAPI kenn ich zwar eine Möglichkeit, das darzustellen, jedoch war es mir bisher noch nicht möglich die Controls ebenfalls ohne rießen Performance Verlust darzustellen...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ich hab einfach Paint.NET genommen, die Toleranz des Zauberstabs auf 50 gestellt und mit Shift+Maustaste alle transparenten Pixel ausgewählt. ^^
    Und nochwas: Das Auswahltool in PS (generell alle Auswahltools) glätten die Auswahlkanten. ;)
    Ich weiß da der Thread alt ist.
    Aber da dieser Thread ziemlich weit oben auf Google erscheint,
    und Suchende immernoch nach einer Antwort suchen,
    geb ich hier meine kleine Funktion für euch frei,
    die den kram mit Paint und Photoshop euch erspart.

    VB.NET-Quellcode

    1. Private Sub FixTransparency()
    2. Dim bm = New Bitmap(Me.BackgroundImage)
    3. For nY As Integer = 0 To (bm.Height - 1)
    4. For nX As Integer = 0 To (bm.Width - 1)
    5. Dim c As Color = bm.GetPixel(nX, nY)
    6. If Convert.ToInt32(c.A) < 210 Then '//Diesen Wert je nach Bild anpassen (0-255)
    7. c = Color.FromArgb(c.R, c.G, c.B, Convert.ToByte(0))
    8. bm.SetPixel(nX, nY, c)
    9. End If
    10. Next
    11. Next
    12. Me.BackgroundImage = bm
    13. End Sub


    Anwendung:
    Diese Funktion nach dem setzen des Hintergrundbildes (der Form) einmal abrufen

    Funktionsbeschreibung:
    Setzt von jedem Pixel den Alphawert (wenn er zu niedrig ist) auf null.
    -> Macht halbdurchsichtiges weg

    Code-Lizenz:
    Freigegeben für jegliche Benutzung
    -> Nichts wird vorgeschrieben


    Bitteschön.
    :thumbsup:
    Das ist ja sehr löblich, dass du den leuten helfen willst, aber die Funktion ist ziemlich unnötig, wenn man schon ein Bild hat, was sich im Prinzip nie ändert und somit nie etwas beinflusst ist es sinnvoller direkt die Halbtransparenz zu entfernen.
    Ist in Gimp/Photoshop und co eine Sache von wenigen Klicks.

    Außerdem könnte man deinen Code auch wesentlich verbessern. Stiwchwort: LockBits
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---