2010-07-31 4 views
4

je vais vous montrer une image ci-dessous mais avant ...C# - Winforms Transparence Problème (je deviens fou avec elle)

si vous avez vu des widgets Yahoo ou des fenêtres cartoony/thème skins lecteur multimédia ..

Je suis la construction d'une barre de titre moins ... moins ... fond application ... ses regards comme celui-ci

alt text http://fc05.deviantart.net/fs70/f/2010/212/4/c/scrap_by_junaid_saeed.jpg

l'arrière-plan plus sombre que vous voyez est en fait mon fond d'écran cuz c'est une capture d'écran ..

pour atteindre cette .. la forme du corps et les lignes, j'utilise PNG transparent .. puis j'utilise la clé de transparence de la forme de Win pour le rendre transparent .. et l'image est chargée dans une boîte d'image ... Mon problème est les points blancs que vous voyez sur tout le contour du corps ... c'est parce que les pixels de ce PNG ne sont pas complètement opaques ou transparents c'est-à-dire translucides ... donc la clé de la transparence ne parvient pas à faire le fond de la forme transparente à ces pixels ... et vous voyez ces points blancs ...

bien est-il une autre façon transparente rendre la forme parce que ...

  • clé de la transparence se comportera toujours comme ça parce que peu importe ce que vous faites, il y aura toujours ces pixels translucides dans l'image dans les courbes ...
+1

Urghh Je pense que j'ai essayé de faire pareil avant avec peu de chance. Winforms, la touche de transparence et les fichiers PNG ne vont pas bien ensemble. Que diriez-vous de WPF? – Mau

+0

qu'est-ce que c'est ... j'ai vu l'abrv "WPF" quelque part – Moon

+2

WPF est un framework complètement différent de WinForms, et qui a très peu en commun avec WinForms. Il faudrait beaucoup de ré-apprentissage si vous êtes déjà familier avec WinForms. – Timwi

Répondre

2

Johannes a mentionné les principaux problèmes avec votre approche actuelle.

Il est possible de faire un fondu alpha dans Windows Forms, mais vous devrez utiliser l'appel de l'API Windows (entre autres): UpdateLayeredWindow.

Visual C# Kicks a un helpful tutorial and source code sur la façon de le faire pour créer un écran d'accueil professionnel. Le seul inconvénient est que si votre formulaire contient des contrôles enfants tels que des boutons, des zones de texte, ils ne seront pas dessinés à l'aide de UpdateLayeredWindow. Cependant, vous pouvez toujours simuler des boutons, etc. en les dessinant manuellement dans le cadre de l'arrière-plan du formulaire.

+0

la seule chose est maintenant je ne peux pas avoir des composants de l'interface utilisateur, mais vous avez résolu ce que je demandais .. – Moon

3

Vos problèmes sont ici

  • Le PNG est lissée
  • Il est composited sur le fond de la forme normale (SystemColors.Control)
  • Si vous faites que transparent en utilisant la propriété TransparencyKey (ce qui en fait un s Ingle couleur transparente, mais rien d'autre), vous finirez par avoir le PNG où l'opacité avait une transparence partielle

Jusqu'à présent, si attendu. Gardez à l'esprit: vous ne dessinez pas de PNG partiellement transparent sur l'écran; vous le dessinez sur votre formulaire et vous prenez alors le résultat final et faites une seule couleur transparente. Pour tout ce que ça vaut, votre PNG pourrait avoir le rose comme couleur environnante, le résultat serait le même.

Vous pouvez vouloir regarder les régions ou ne pas anti-alias le PNG que vous dessinez.

+0

comment ne peut pas anti-alias ... j'ai essayé, mais je suis incapable de le faire dans photoshop – Moon

Questions connexes