Orbiter Francophone > Orbiter Francophone

Un problème de transparence...

(1/2) > >>

Spacingbluefrog:
Salut Dan,

C'est une question toute spéciale pour toi.
J'ai besoin dans un de mes panels de faire apparaître un bitmap avec un fond transparent. Et pour la première fois, je suis
totalement coincé. J'ai bien trouvé sur le forum officiel (http://orbit.m6.net/v2/read.asp?id=14640) le même pb mais la
réponse me laisse plus que perplexe.
Le trick ne doit pas être bien sorcier, mais il y a une absence totale d'information dans la littérature. Et je SAIS que tu
as été confronté au pb à bien regarder le DG. :)
Alors un petit coup de pouce serait le bien venu...

AU fait, je me suis aperçu que j'ai toujours écrit içi en guest! Gasp! Je viens de m'enregistrer...

DanSteph:
oui re-bienvenu :)

pas grave j'ai passé tous tes vieux posts sous "enregistré".

Pour le fond facile, quand tu load ton bitmap dans le code tu defini
une "transparency color" le plus souvent blanc complet 'FFFFFF'
(255,255,255) (n'importe quel couleur mais le blanc est conseillé dans la doc
bien que les pro dans les jeux utilisent souvent un rose pétant le 'FF00FF')


Dans le code "OvcLoadPanel" quand tu enregistre ton fond
la "transparency color" est le dernier paramètre:

oapiRegisterPanelBackground (hBmp, PANEL_ATTACH_BOTTOM|PANEL_MOVEOUT_BOTTOM, 0xffffff); //<-- blanc

Sa n'empeche pas d'avoir du blanc (FEFEFE) et il suffit de peindre ton background
avec du FFFFFF pour avoir la tranparence.

Hope it aide ?

Dan

Spacingbluefrog:

Ouais, pour ça pas de pb, y'a longtemps que l'affaire est claire!

Ce dont j'ai besoin c'est qu'une fois défini un AID_NAWAK, et un IDB_Nawak, quand je passe la fonction :
oapiBlt (surf,nnnnnn)
le fond de mon bitmap soit transparent, id que je vois le fond de mon panel et que seule l'information graphique dont j'ai
besoin apparaisse.
Dans le thread sur orbit.m6, il est dit que la solution est :
oapiBlt( surf, nnnnnn, SURF_PREDEF_CK)
mais quand je l'utilise brut de décoffrage, mon bitmap n'apparaît pas! Ha, ça, pour être transparent, il l'est!

Ai-je été plus clair?

DanSteph:
ah ?

alors il y a un autre problème:

Est tu sure de définir la key de tranparence ?

ici noir:

srf[1] = oapiCreateSurface (LOADBMP (IDB_BITMAP_ECG));
oapiSetSurfaceColourKey (srf[1], 0);



Quand tu blit attention a la taille du cadre, si ton blit est plus
grand que ta surface ca pose problème

Gaffe toi de pas être dans un DC


oapiGetDC (surf);
// pas ici surtout
oapiReleaseDC (surf, hDC);
oapiBlt (surf, srf[1],78,46, [snip], SURF_PREDEF_CK);


Et surtout gaffe toi que "surf" soit valide
teste ca avant le redraw:
if(!surf)
sprintf (oapiDebugString(), "caca, surf est null");



et il bien declaré dans le panel init ?

oapiRegisterPanelArea (AID_OUTERAIRLOCKBUTTON,_R( 301,  30, 326,  68), PANEL_REDRAW_USER,
PANEL_MOUSE_LBDOWN);

Attention si "PANEL_REDRAW_USER" tu doit initier le refresh toi meme avec
"oapiTriggerPanelRedrawAreaDGII (0, AID_OUTERAIRLOCKBUTTON);"


Ta function redraw est elle bien appelée ?
sprintf (oapiDebugString(), "oui oui ce code est éxécuté");


Voila désolé c'est un peu le bordel mais tu a l'air de connaitre
alors tu devrais t'y retrouver

Dan

Spacingbluefrog:
Ouais, nickel!

J'ai trouvé la faille!

Honte sur le Doc! (surtout, fais pas suivre le message!)
Dans Orbitersdk.h la valeur SURF_PREDEF_CK est définie à 0xFFFFFFFE ! J'avais beau mettre mon fond à 255,255,254, nada! C'est
Parkinson qu'a frappé! La bonne valeur est   0xFFFFFE!

fffffp.....

Navigation

[0] Message Index

[#] Next page

Go to full version