Transparente Form mit unschönem Rand

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Snaptu.

    Transparente Form mit unschönem Rand

    Hallo,

    ich wollte mir als "splashscreen" eine Transparente Form machen und hab es nach diesem Tutorial gemacht:

    [VB 2008] Ein Fenster in jedem beliebigen Design erstellen

    jetzt habe ich das Problem das ich kein abgerundetes Rechteck habe sondern ein komplizierteres Bild.
    Jedesmal wenn ich dann die Backcolor und den TransparencyKey umstelle ist diese Farbe dann als ganz zarter Rand
    sichtbar. Gibt es eine Möglichkeit diesen Rand noch wegzubekommen? Ich habe schon Google benutzt und komme immer
    wieder auf Tutorials die das genauso machen.

    Ich habe auch schon die Variante probiert mit einer PictureBox zu arbeiten so das diese Transparent ist, selber Effekt.
    Vielleicht gibt es ja noch eine bessere Möglichkeit das zu machen, vielleicht liegts aber auch an meinem Bild.
    Im Anhang habe ich ein Bild wie das dann aussieht.

    Schonmal Danke für eure Hilfe!
    Bilder
    • screen1.JPG

      21,21 kB, 737×345, 173 mal angesehen
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Snaptu“ ()

    Nun - ein Bild besteht aus endlich vielen Pixeln, die sind quadratisch.
    Wenn Du einen Kreis malst, musst Du Dich entscheiden, ob das eine oder das andere Pixel genommen wird, wenn Du das Bild vergrößerst, siehst Du also die "Bauklötzer".
    Es gibt eine Einstellung Antialiasing, die sagt, welches Pixel oder ob mehrere Pixel gesetzt werden. Such mal danach.
    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 schrieb:

    Wenn Du einen Kreis malst, musst Du Dich entscheiden, ob das eine oder das andere Pixel genommen wird, wenn Du das Bild vergrößerst, siehst Du also die "Bauklötzer".
    Das ist Wahrscheinlich nicht der Grund.
    Es liegt wohl eher daran, dass das Bild, was er darstellen möchte, an den Rändern halbtransparente Farben hat. Die Form "liegt aber darunter" und somit werden die halbtransparenten Pixel mit der Formhintergrundfarbe vermischt, statt mit (in diesem Fall) dem Desktop. Einen Ähnlcihen Effekt gibt es bei GIF-Grafiken, die nur einen 1Bit-Alpha-Kanal haben.

    Edit:
    Das hast du ja gemeint, sorry. :)
    Von meinem iPhone gesendet

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nikeee13“ ()

    Du musst dein Bild an den äußeren Rändern wirklich komplett ohne Antialiasing zeichnen. Mit anderen Worten: Benutze nur Alpha 0 oder 255. Dann sieht es zwar doof aus, aber dann ist die Farbe der Form nicht zu sehen

    edit: wait, ich erinnere mich gerade an einen nützlichen Code. *such*

    edit2: Wenn du dein SplashScreen-Bild in diesem Event zeichnest, brauchst du keinen Transparency-Key, BackgroundImage oder sonstwas:

    VB.NET-Quellcode

    1. Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs)
    2. 'hier zeichnen
    3. End Sub

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „vb-checker“ ()

    Wenn du dein SplashScreen-Bild in diesem Event zeichnest, brauchst du keinen Transparency-Key, BackgroundImage oder sonstwas:


    Zeichnen ist für mich ein neues Thema da muss ich mich erst einlesen.
    abgesehen davon das ich nicht einmal weiß wie man sowas anfängt,
    bei mir muss man es noch eher für Dumme erklären bis ich soweit bin :D
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.

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

    Das Prinzip ist einfach:

    VB.NET-Quellcode

    1. Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs)
    2. 'dein Bild zeichnen
    3. e.Graphics.DrawImage(My.Resources.SuperTollesBild, 0, 0)
    4. End Sub


    Du musst dein Bild mit der Transparenz nur vorher zu den Resourcen hinzufügen.

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !