Page 1 sur 2
Problème de scintillement avec un ImageGadget transparent
Publié : jeu. 08/avr./2010 8:29
par deeph
Bonjour,
Voilà mon problème : j'ai une image transparente 32bits (PNG) que je charge dans un ImageGadget puis qu'ensuite je met à jour plus ou moins fréquemment, et c'est là que ça scintille de partout... Or quand j'utilise une image non transparente ça le fait pas :/
J'aimerai éviter d'utiliser l'API vu que j'aimerai bien que mon programme reste compatible linux.
Donc dans mon cas ce que j'aimerai faire c'est, une fois que l'image est chargée, retirer sa transparence puis l'afficher dans le gadget. Y-a-t-il moyen de faire ça sans passer par l'API ?
Re: Problème de scintillement avec un ImageGadget transparen
Publié : jeu. 08/avr./2010 10:38
par Ar-S
Salut,
Donne du code et une image.
Re: Problème de scintillement avec un ImageGadget transparen
Publié : jeu. 08/avr./2010 10:51
par deeph
J'veux bien mais comme c'est une petite partie de mon éditeur de carte pour compiler ça le fait pas trop :/
En gros :
Code : Tout sélectionner
LoadImage(#ChipsetImage, _map\chipset)
[...]
ScrollAreaGadget(#ChipsetScrollArea, #ChipsetScrollArea_x, #ChipsetScrollArea_y, #ChipsetScrollArea_w, #ChipsetScrollArea_h, ImageWidth(#ChipsetImage), ImageHeight(#ChipsetImage), 1, #PB_ScrollArea_Single|#PB_ScrollArea_Center)
ImageGadget(#ChipsetGadget, 0, 0, ImageWidth(#ChipsetImage), ImageHeight(#ChipsetImage), ImageID(#ChipsetImage))
CloseGadgetList()
[...]
CopyImage(#ChipsetImage, #ChipsetLayer_temp)
If StartDrawing(ImageOutput(#ChipsetLayer_temp))
If cursor\layer = 1
Draw_box(tile_layer1\x, tile_layer1\y, tile_layer1\w, tile_layer1\h)
ElseIf cursor\layer = 2
Draw_box(tile_layer2\x, tile_layer2\y, tile_layer2\w, tile_layer2\h)
ElseIf cursor\layer = 3
Draw_box(tile_layer3\x, tile_layer3\y, tile_layer3\w, tile_layer3\h)
EndIf
StopDrawing()
SetGadgetState(#ChipsetGadget, ImageID(#ChipsetLayer_temp))
EndIf
Sinon pour tester :
Editeur.7z (la carte casino par exemple bug)
L'éditeur bug et il manque plein de trucs mais c'est parce que je suis en train de le refaire avec une image pour la map plutôt qu'un écran. L'image du chipset est chargée dans init.pb, puis le rafraichissement du gadget se fait dans HandleChipset() de map.pb.
Re: Problème de scintillement avec un ImageGadget transparen
Publié : jeu. 08/avr./2010 12:55
par G-Rom
J'aimerai éviter d'utiliser l'API vu que j'aimerai bien que mon programme reste compatible linux.
Dans l'état actuel , ca ne marche pas. car les chemins de fichier ( les includebinary ) ne sont pas bons
ex :
"icons\tile_anim0.png" doit devenir "icons/tile_anim0.PNG" ( Linux est sensible à la case , et '\' doit être '/' pour que ca marche sur les 2 os)
les .ico ne fonctionne pas sous linux , c'est un format ms.
@+
Re: Problème de scintillement avec un ImageGadget transparen
Publié : jeu. 08/avr./2010 15:16
par deeph
J'ai pas encore commencer à réellement adapter mon programme à linux, mais je sais que l'utilisation de l'API m'en empêchera...
Re: Problème de scintillement avec un ImageGadget transparen
Publié : jeu. 08/avr./2010 15:34
par G-Rom
non , pas forcement , tu as forcement l'équivalent sous linux.
après si c'est pour de la "déco" , c'est pas bien grave.

Re: Problème de scintillement avec un ImageGadget transparen
Publié : jeu. 08/avr./2010 15:42
par deeph
Mouais... Enfin bon personne n'a de solution pour retirer la transparence d'une image ou éviter d'une autre façons ce scintillement ?
Re: Problème de scintillement avec un ImageGadget transparen
Publié : jeu. 08/avr./2010 15:47
par G-Rom
le scintillement viens certainement du fait que tu update ton image ou sprite
ensuite , pour retiré la transparence , pas 36 solution , tu dessines un rectangle de la couleur que tu veut , ensuite tu pastes ton image par dessus le rectangle , en sortie , plus de couleur transparente...
Re: Problème de scintillement avec un ImageGadget transparen
Publié : jeu. 08/avr./2010 16:00
par deeph
Non le scintillement n'a pas lieu avec une image sans transparence, ça se vois en chargeant une autre map que army ou casino (24bits ?). J'vais voir si redessiner suffit.
Edit :
Code : Tout sélectionner
If StartDrawing(ImageOutput(#ChipsetImage))
DrawingMode(#PB_2DDrawing_AlphaChannel)
Box(0, 0, ImageWidth(#ChipsetImage), ImageHeight(#ChipsetImage), RGBA(255, 128, 128, 255))
StopDrawing()
EndIf
Ça change qu'dalle, le problème c'est donc que l'image est en 32bits :/
Re: Problème de scintillement avec un ImageGadget transparen
Publié : jeu. 08/avr./2010 16:13
par G-Rom
je boote sous windows et je regarde.
Re: Problème de scintillement avec un ImageGadget transparen
Publié : jeu. 08/avr./2010 16:39
par G-Rom
Dans ton map.pb
il y a dans la procedure HandleMap() des DrawAlphaImage() qui ne servent à rien ( tu ne passe pas de paramètres pour la valeur ) remplace les par des drawimage() , ici ca ne scintille plus. Ton exe ne donne pas les même resultats que le code par contre j'ai une sorte de couche "rose" permanente...
Re: Problème de scintillement avec un ImageGadget transparen
Publié : jeu. 08/avr./2010 16:46
par deeph
Nan mais pour la carte c'est normal, il faut de la transparence pour les couches, c'est pour le chipset que ça bug.
Re: Problème de scintillement avec un ImageGadget transparen
Publié : jeu. 08/avr./2010 17:46
par G-Rom
j'en sais rien. de toute manière passé par une image pour faire une map c'est du bricolage.
passe par openwindowedscreen() ,vu que tu as l'air calé , tu pourras te bricolé une mini-gui qui te resservira dans ton jeu.
@+
Re: Problème de scintillement avec un ImageGadget transparen
Publié : jeu. 08/avr./2010 18:17
par deeph
J'utilise déjà un écran fenêtré dans
cette version de mon éditeur, mais je trouve ça trop lourd (pas de redimensionnement auto avec la fenêtre etc...), utiliser une image c'est plus flexible j'trouve.
Enfin bref je pense que je vais faire autrement : j'ouvre une image "normale" RVB comme avant puis ensuite je modifie sa couleur RVB(255, 128, 128) en transparent pour pouvoir créer mes tiles pour la carte...
Re: Problème de scintillement avec un ImageGadget transparen
Publié : jeu. 08/avr./2010 18:36
par G-Rom
mais je trouve ça trop lourd (pas de redimensionnement auto avec la fenêtre etc...)
Resultat = OpenWindowedScreen(FenetreID, x, y, Largeur, Hauteur, RedimensionnementAuto, OffsetDroit, OffsetBas [, FlipMode])