2009-05-27 8 views
2

J'ai un flux webcam qui est affiché sur mon formulaire et que j'aimerais dessiner par-dessus. J'allais le faire en utilisant une boîte d'image, j'ai trouvé le PictureBox ne supporte pas la vraie transparence à la place de la couleur de la forme sur laquelle il est. Il ne supporte pas non plus l'alphablending, ce qui est la manière dont je voudrais l'afficher, de la même façon que les formes peuvent apparaître.C# Alpha Blend Transparent PictureBox

Est-ce que quelqu'un sait comment faire cela? Ou avez-vous mis en place un contrôle capable de le faire?

Répondre

1

Dans la plupart des cas, la réponse d'OwenP en utilisant la méthode Bob Powell démontrée ici http://www.bobpowell.net/transcontrols.htm fonctionnera. Toutefois, comme il s'agissait d'une interface de dessin direct vers la webcam, le flux en direct semblait toujours être au-dessus des autres contrôles.

Pour résoudre ce problème, j'ai triché un peu et créé une forme secondaire qui s'ouvre sur le flux vidéo qui n'avait pas de frontières, était toujours sur le dessus et étant donné la transparence, j'ai dessiné directement sur ce formulaire. J'ai ensuite dû gérer quelques événements dans ce formulaire secondaire pour garder le focus sur le formulaire d'origine et gérer quand un autre programme est utilisé.

0

Vous pouvez placer le PictureBox sur un autre formulaire séparé et utiliser la valeur Opacité des formulaires dans la catégorie Style de Windows. Cela fonctionnerait-il?

+0

Non, ce n'est pas la transparence de la boîte de l'image est simple, il obtient juste la couleur de retour du contrôle, il est malheureusement – PeteT

5

La transparence dans Windows Forms est en quelque sorte cassée. Comme vous l'avez découvert, il ne supporte pas vraiment les contrôles qui se chevauchent; il montre juste la couleur de fond du formulaire à travers les parties transparentes. Avec un peu de magie de l'API Windows, vous pouvez afficher de nombreux contrôles comme réellement transparents avec prise en charge du chevauchement, comme this article by Bob Powell demonstrates. J'ai été en mesure de faire fonctionner sa technique pour les étiquettes et les contrôles personnalisés, mais je pense que j'ai essayé de le faire fonctionner pour PictureBox avec des résultats décevants. Une solution de contournement pourrait être essayer de créer un contrôle personnalisé qui dessine manuellement l'image; Je n'ai pas essayé. Here's a forum post où je démontre un contrôle personnalisé qui supporte la vraie transparence (mon handle sur ce forum est AtmaWeapon.) Ma mémoire semble suggérer que cela fonctionne mieux pour les contrôles personnalisés en raison de la magie apparente qui arrive avec les contrôles de Microsoft quand ils sont rendus.

Vous pouvez également implémenter votre application en utilisant WPF au lieu de WinForms. La transparence de WPF fonctionne et supporte des contrôles qui se chevauchent. C'est un changement assez important dans la façon dont vous développez votre application, mais cela fonctionne dès le départ.

+1

+1 Je viens de trouver votre message sur le forum très précieux. – snicker