C# Picturebox fond transparent ne semble pas fonctionner
Pour un projet de mine j'ai besoin d'afficher des images avec un fond transparent. J'ai fait quelques .les images png qui ont un arrière-plan transparent(pour vérifier que j'ai ouvert dans Photoshop). Maintenant, j'ai une classe qui étend la classe PictureBox:
class Foo : PictureBox
{
public Foo(int argument)
: base()
{
Console.WriteLine(argument);//different in the real application of course.
//MyProject.Properties.Resources.TRANSPARENCYTEST.MakeTransparent(MyProject.Properties.Resources.TRANSPARENCYTEST.GetPixel(1,1)); //<-- also tried this
this.Image = MyProject.Properties.Resources.TRANSPARENCYTEST;
((Bitmap)this.Image).MakeTransparent(((Bitmap)this.Image).GetPixel(1, 1));
this.SizeMode = PictureBoxSizeMode.StretchImage;
this.BackColor = System.Drawing.Color.Transparent;
}
}
toutefois, cette affiche juste le picturebox avec un fond blanc, je n'arrive pas à le faire fonctionner avec un fond transparent.
- Pourriez-vous fournir un lien vers une de vos images (le plus basique que vous avez)?
- imgload.nl/upload/1301737511BLUE.png <-- c'est une des images que j'ai utiliser
- Je me souviens vaguement (à partir de mon WinForm jours) qui, lors d'un contrôle de fond est marqué "transparent", c'est pas vraiment rendu transparent. Au lieu de cela, il est rendu avec la couleur d'arrière-plan du conteneur. Est la couleur de fond de votre bac blanc?
- Je suis assez sûr que c'est ce qu'il est. En WinForms, il n'y a pas une véritable transparence pour les images (pas par défaut). Si vos contrôles se chevauchent, vous allez le voir.
- Puis je commence à haïr C# de plus en plus, pas de transparence lol? le seul conteneur, il a une forme, avec un fond blanc, en effet.
- Que pourriez-vous attendre de la forme s (blanc) à l'arrière-plan visible à travers les zones transparentes? Je ne comprends même pas ce que la question est ici... Hans réponse est à droite sur l'argent. (Notez aussi que cela n'a rien à voir avec le langage C#. C# ne dispose pas d'une interface utilisateur; vous êtes à l'aide de WinForms pour que, qui enveloppe le natif de Windows API. Ce n'était pas vraiment conçu pour la transparence. Vous n'êtes pas à construire des pages web, mais les applications de bureau.)
Vous devez vous connecter pour publier un commentaire.
Probablement qu'elle fonctionne parfaitement. Vous voyez ce qui se cache derrière l'image de la boîte de contrôle. Qui est la forme. Dont BackColor est probablement blanc. Vous pouvez définir la forme de la propriété BackgroundImage pour être sûr, vous devriez voir l'image à travers la zone d'image. Comme ceci:
De boxe un trou à travers les deux la zone d'image et le formulaire exige une plus grande arme, de la Forme.TransparencyKey
Si vous voulez superposer des images sur les images (et pas des images sur la forme), ce serait faire le truc:
Où overImage et backImage sont PictureBox avec png (avec fond transparent).
C'est parce que, comme dit précédemment, la transparence d'une image est affichée en utilisant la couleur de fond du conteneur Parent. PictureBoxes n'ai pas un "Parent" de la propriété de sorte que vous avez à faire cela à la main (ou en créer un cutom de contrôle, bien sûr).
.BackColor
àColor.Transparent
a été la clé. Merci!Il y a une excellente solution sur le CodeProject site web à
Faire Des Contrôles Transparents - Pas De Scintillement
essentiellement l'astuce consiste à remplacer la paintbackground événement afin de faire une boucle par tous les contrôles sous-jacents de la picturebox et de les redessiner. La fonction est:-
Je sais que votre Question est fondée en C#, mais en raison de la similitude, & la facilité de la conversion de VB.NET, je vais ajouter un VB version qui permet également la mise à jour de l'arrière-plan du contrôle que vous vous déplacez autour de.
Vous avez déjà une réponse, mais c'est pour les autres qui trouvent ce post par les moteurs de recherche, & aimerais un VB version, ou tout simplement souhaitez trouver PLEIN convertible exemple, s'ils ont également besoin de C#.
Créer un nouveau Contrôle Personnalisé de la Classe, & collez le texte suivant dans il... l'écrasement de la classe par défaut trucs:
Contrôle Personnalisé De La Classe:
...enregistrer la classe, puis nettoyer votre projet, & de construire à nouveau. Le nouveau contrôle doit apparaître comme un nouvel outil de l'Élément. Trouver, & faites-la glisser vers votre formulaire.
J'ai eu des problèmes de ce contrôle mais... Il se passe lorsque j'essaie de charger une animation de "Chargement" .gif image.
L'image ne s'anime pas, & aussi a des problèmes d'affichage lorsque vous masquez le contrôle, puis essayez de l'afficher à nouveau.
Trier ces questions, & vous aurez un parfait Contrôle Personnalisé de la Classe. 🙂
EDIT:
Je n'ai aucune idée de si ce qui suit fonctionnera dans C#'s IDE ou pas, mais voici ma tentative de conversion:
Essayer, & voyez par vous-même, je suppose 😛
ps: je ne suis pas un gourou, alors attendez-vous à toutes sortes d'erreurs dans le C#, & VB.NET les versions. lol
Si vous êtes en affichage png avec transparence dans la zone d'image, il sera automatiquement prendre la transparence en compte, de sorte que vous n'avez pas besoin de définir la couleur de transparence
Les réponses ci-dessus semblent résoudre votre problème. Vous êtes en effet de voir ce qui est derrière l'image de la boîte de contrôle - le formulaire lui-même avec backColor blanc. J'ai créé une fonction simple qui convertit une image de type octet (array) dans une image et, par la suite, l'établissement des couleurs (à partir de l'image bitmap pic) et transparent. Quelque chose que vous pourriez aussi bien utiliser:
Vous pouvez tirer de cette func sur la Peinture de la pictureBox.
C'est ma classe qui est référencé n la fonction ci-dessus:
Grâce. Chagbert