PictureBox Transparente [Résolu]

Signaler
Messages postés
33
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
14 décembre 2008
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
Bonjour :)

Je cherche depuis quelques jours un moyen de rendre transparente une picturebox suivant un certain % d'opacitée, afin de voir la form, les controles, et l'interface présente dessous. J'avais trouvé un tres bon code, seulement il ne permettait que de fusionner deux images pour leur appliquer un % d'opacité.

Or sous la picturebox sera affiché des surfaces en DirectX 7 ( 2D ), et il est impossible d'obtenir cette surface dans une picturebox reelement ( à moins d'utiliser la fonction pour coller la surface dans une picturebox, qui prend plus ou moins 15ms, trop long ).

Je cherche donc une vraie méthode, simple, et non un bidouillage pour qu'une picturebox soit transparente, sous un certain niveau d'opacité ( le contenu sous la form doit être raffrachi 21fois par secondes, sans prendre plus de quelques ms ).

Merci d'avance

10 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
on revient au point de départ ^^

dans ce cas fais toi juste une anim flash avec fond transparent, qui passe un claque blanc alpha de 20 à 120 par exemple, ou fixe, puis affiche juste ton anim dans une shockwave

tu as pas mal de pistes. le reste c'est de la recherche et des essais. concrêtement tu en es où niveau code?
jeter un oeil oui mais j'ai pas le temps de te faire un compo... surtout si au final c'est pas utile
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
salut,

nativement tu ne peux pas.

donc pas le choix, en plus avec %age, c'est du code

la bidouille (que tu ne veux pas) serait de détacher la picture du parent (par code) et alors de l'altérer par setlayered...
cette solution est plus propre qu'il n'y paraît, et est la plus simple à mettre en oeuvre
çà se complique si le parent se déplace

sinon tu dois jouer avec une capture du fond, ou que le moteur directx renvoie lui-même l'aperçu en cours

ensuite travailler sur cet aperçu pour le "rendre transparent". cette méthode sera néanmoins plus longue et tu risques d'avoir un scintillement

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
Messages postés
33
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
14 décembre 2008

Merci tout d'abord de ta réponse.

Je me doutais d'une reponse comme celle ci allait arriver... Mais qui ne tente rien n'as rien...

Je rajoute donc deux questions, est-ce que la technique est compatible avec windows 98 ?
Y aurait-il moyen de le faire en direct X ( pas forcement rendre transparente une deuxieme image ^^ ).

J'ai une surface dd_backbuffer ^^ qui contiens tout l'affichage du jeu, imprimé ensuite sur la couche principal. Je souhaite, si possible la modifier pour obtenir un rendu comme ceux-ci ( réalisés avec un autre code, ralentissant le jeu ) :

http://img172.imageshack.us/img172/8392/sfogqh5.jpg
http://img370.imageshack.us/img370/4325/snightsw5.jpg

Merci d'avance pour  vos réponses.
Messages postés
33
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
14 décembre 2008

Oups, pas moyen d'éditer, j'ai fait une faute :

J'ai une surface dd_backbuffer ^^ qui contiens tout l'affichage du jeu,
imprimé ensuite sur la picturebox principale. Je souhaite, si possible la 
modifier ( la surface ) pour obtenir un rendu comme ceux-ci ( réalisés avec un autre
code, ralentissant le jeu ) :
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
est-ce que la technique est compatible avec windows 98


pas avec SetLayeredWindowAttributes non. par contre par code avec GetDIBits et SetDIBits par exemple, oui

Y aurait-il moyen de le faire en direct X
sans doute mais là faut pas compter sur moi ^^

lors de ton filtre/fondu (comme sur les captures), le jeu continue à être en mouvement derrière? ou c'est une étape en pause...
en mouvement çà va consommer énormément de ressources à cause de la fréquence de rafraichissement, mais ce que tu veux faire est tout à fait possible.
peut-être aussi possible de tricher un peu en travaillant sur ton image "réduite", puis stretch après le fondu... si çà ne pixélise pas trop

pour les DIB tu peux aussi jeter un oeil aux sources de DarkSidious dont une fait précisément ce que tu recherches

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
Messages postés
33
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
14 décembre 2008

Serait-il possible que tu m'adapte le code proprement, pour éviter toute perte de ressources ?

Si non, pourrais-tu m'indiquer où trouver les infos qu'il me faut pour realiser moi même ( moi et les bibliotheques ça fait deux, et je n'ai trouvé aucun tuto )...
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
commence à voir et comprendre cette source :
http://www.vbfrance.com/codes/FUSION-IMMEDIATE-IMAGES_21354.aspx

ensuite si besoin on t'aidera ;)
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
Messages postés
33
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
14 décembre 2008

Merci, j'avais déja consulté cette source ( enfin une source du genre ). Le probleme est qu'il faut réaliser une copie du DD_backbuffer sur une picturebox ( soit 900x900 pixels a copier ). Le jeu nécessite un raffraichissement de 21FPS, et le temps nécessaire a cette copie était trop important. 15ms environ ( sachat qu'il s'execute toute les 50ms c'est trop, il n'y a plus le temps pour le reste du programme ).

C'est pour cela que je demandais une technique qui ne créais pas une simulation de picturebox transparente, je veux une vraie picturebox transparente ( qui soit fait avec un bidouillage ou non ), par dessus ma picturebox principale qui contiens la surface DD_BackBuffer.
Messages postés
33
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
14 décembre 2008

tu as pas mal de pistes. le reste c'est de la recherche et des essais. concrêtement tu en es où niveau code?
jeter un oeil oui mais j'ai pas le temps de te faire un compo... surtout si au final c'est pas utile

De toute façon, c'est clair que si la technique est simple, je preferais le faire moi même. Seulement le controle shockwave est opaque non ? quelque soit la transparence de l'annimation placée par dessus??

Pour ton info le jeu est en Bêta actuellement, client / serveur (a peu pres) fonctionnels :)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
avec l'API AlphaBlend çà donne du "pas trop mal"

moins de 10 ligens de code, compatible Win98
a besoin d'un HDC de destination, et un STD_Picture en entrée

(shockwave pas forcément opaque non)

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp