Comment puis-je obtenir une fenêtre transparente primitives de dialogue et de dessin pour rester au-dessus d'une fenêtre qui attire le streaming vidéo?

StackOverflow https://stackoverflow.com/questions/2180125

Question

J'ai un contrôle activeX qui contient une fenêtre qui a le streaming vidéo en cours d'élaboration à lui. J'ai une boîte de dialogue séparée que je crée dans une autre fenêtre que je l'ai rendue transparente ou semi-transparente de diverses manières (par exemple en utilisant les SetLayeredWindowAttributes (...) ainsi que la propriété Layered [de mélange alpha] de la boîte de dialogue ou le réglage de la transparence propriété).

En outre, j'ai essayé d'utiliser différentes méthodes pour tenter d'obtenir la fenêtre de la boîte de dialogue de tirer toujours sur le dessus de la fenêtre vidéo en streaming, mais aucun n'a prouvé à travailler pour moi. Si j'ai un bouton sur la boîte de dialogue ou dessiner sur la surface transparente avec LineTo (...) les appels ne restent pas au-dessus de la vidéo. Je l'ai essayé d'utiliser SetWindowPos d'affecter l'ordre z des deux fenêtres et aussi essayé de changer les propriétés de la fenêtre de dialogue tels que « TopMost », mais sans résultat.

Quelqu'un at-il essayé de faire quelque chose comme ça pour une fenêtre sur la vidéo de superposition streaming et obtenu le z-commande pour travailler à la peinture de la fenêtre avant la vidéo toujours après streaming?

Mise à jour: 02/10/10 - essayé d'utiliser la propriété WS_EX_LAYERED avec SetLayeredWindowAttributes (...) en utilisant LWA_COLORKEY et obtenu ce que je cherchais. Étant donné que la propriété en couches ne peut pas être utilisé avec style WS_CHILD cette solution apporte avec elle une certaine gestion requise de la position de la fenêtre de recouvrement par rapport à la fenêtre avec la vidéo. De plus, il y a d'autres bizarreries que je suis en train d'éliminer. Par exemple, lorsque la fenêtre de contrôle activeX avec vidéo est intégrée dans un onglet IE et je passe à un autre contrôle onglet dans la fenêtre de recouvrement restent sur le nouvel onglet (lorsqu'il est utilisé style WS_POPUP). enquêtons toujours s'il y aura d'autres moyens de faire face à cette autre détermination puis le commutateur et cacher la fenêtre visability.

Était-ce utile?

La solution 2

propriété WS_EX_LAYERED avec SetLayeredWindowAttributes (...) à l'aide LWA_COLORKEY permettra d'atteindre la transparence où colorkey est utilisé. superposition Transpaerent reste en face de la vidéo et la vidéo en streaming actif reste sous tension. style WS_CHILD ne peut pas être utilisé avec un style en couches et donc la position de la fenêtre exige que la direction supplémentaire si WS_POPUP est utilisé. D'autres problèmes peuvent résulter de l'incapacité d'avoir superposition comme une fenêtre enfant. -voir mise à jour de Q.

Autres conseils

Cela peut ne pas être possible, beaucoup de code de sortie vidéo utilise des superpositions matérielles, donc si votre fenêtre est à l'avant, la superposition soit ne fonctionnera pas, ou ne dessinera pas où vos pixels sont du tout.

superpositions matérielles permettent au code de dessin vidéo pour présenter des images dans un format autre que celui du format d'affichage en cours, ce qui permet d'économiser beaucoup de CPU et de bande passante mémoire.

Dans mon expérience, la superposition est généralement au format YUV plutôt que RVB parce que de nombreux formats de compression vidéo sont basés sur YUV. Ainsi, le matériel vidéo devient quelques pixels d'une image YUV et pas de la mémoire tampon de l'écran, de sorte que vous ne pouvez pas affecter ces pixels à moins que vous vous obtenez inséré dans le chemin de code de rendu du flux vidéo.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top