Décoloration d’une image avec transparence dans l’interface utilisateur WinForms (.NET3.5)

L’application: J’écris un petit jeu qui apprendrait à l’utilisateur à lire des notes de musique. Le jeu est très simple. L’application affiche une note et ma petite fille (utilisateur cible) doit appuyer sur la touche du clavier émulé de l’interface graphique WinForm correspondant à la note. Elle a 1 minute pour obtenir autant de bons résultats qu’elle peut. Les succès et les échecs sont comptés.

La tâche: Comme elle appuie sur une touche bonne / mauvaise du clavier, je veux confirmer immédiatement si elle avait raison ou tort, sans interrompre le jeu . Mon plan est d’afficher un bitmap OK ou FAILED qui s’efface progressivement pour devenir complètement transparent en environ 2 secondes. Faire disparaître progressivement le bitmap est un bon moyen d’encourager l’utilisateur à se concentrer sur la note suivante et à ne plus se soucier du résultat précédent.

La question technique: Comment puis-je afficher une image bitmap sur un Windows Form avec transparence? Ou avez-vous d’autres idées non intrusives et faciles à mettre en œuvre pour informer l’utilisateur du bon ou du mauvais choix actuel?

Comme le dit dylantblack, WPF vous fournit de meilleurs outils pour le faire. Si vous choisissez d’utiliser des formulaires Windows, voici une approche simple utilisant un minuteur qui atténue l’image en fondu. Configurez une timer avec la fréquence que vous préférez. Démarrez le chronomètre, incrémentez l’alpha chaque fois et dessinez le blanc ou la couleur de votre formulaire avec une valeur de canal alpha croissante.

int alpha = 0; 

 private void timer1_Tick(object sender, EventArgs e) { if (alpha++ < 255) { Image image = pictureBox1.Image; using (Graphics g = Graphics.FromImage(image)) { Pen pen = new Pen(Color.FromArgb(alpha, 255, 255, 255), image.Width); g.DrawLine(pen, -1, -1, image.Width, image.Height); g.Save(); } pictureBox1.Image = image; } else { timer1.Stop(); } } 

Dans WinForms, vous devez utiliser des timers ou quelque chose pour animer l’opacité du contrôle OK ou FAILED pour le faire disparaître en fondu ou faire quelque chose de similaire en utilisant GDI + pour le dessiner manuellement.

De toute façon, si vous utilisez .NET 3.5, je vous recommanderais d’utiliser WPF, ce qui est beaucoup plus facile pour faire ce genre de chose.

À titre d’exemple, vous pouvez consulter l’ application Baby Smash de Scott Hanselman , qui est open source et qui a un concept similaire de fondu enchaîné.