Page 1 sur 1
fonctionnement de displayAlphaSprite()
Publié : lun. 13/févr./2012 14:01
par cdurand
Bonjour, c'est encore moi.
Je voudrais utiliser la fonction displayAlphaSprite(), mais je ne trouve aucun exemple sur le net.
J'ai sauvegardé mon image en bmp 256 niveaux de gris (8 bits) comme demandé (avec Photofiltre free).
Je charge l'image avec
LoadSprite(#PB_Any,"mask_256_ng.bmp",#PB_Sprite_Alpha)
Mais déjà la fonction loadSprite me renvoie 0, ce qui ne semble pas normal.
Si je charge sans option, loadSprite((#PB_Any,"mask_256_ng.bmp") fonctionne, mais impossible d'utiliser displayAlphaSprite() alors...
Quelqu'un aurait-il une explication ?
Faut-il utiliser un autre logiciel que Photofiltre (j'ai essayé avec Paint ou The Gimp mais sans résultat) ?
Est-ce mon masque qui ne convient pas ?
Le zip est là :
https://rapidshare.com/files/1237506566 ... Sprite.zip
Merci pour votre aide.
Re: fonctionnement de displayAlphaSprite()
Publié : lun. 13/févr./2012 14:08
par Backup
Le sprite est créé avec le support de l'alpha-channel, le format d'image doit le gérer
t'es sur que le BMP gere l'alha ??
essaye avec un PNG !
(n'oublie pas d'ajouter "
UsePNGImageDecoder()" dans ton code )

Re: fonctionnement de displayAlphaSprite()
Publié : lun. 13/févr./2012 17:28
par cdurand
J'ai cru comprendre que displayAlphaSprite() n'a aucun rapport avec la couche alpha d'une image, mais "simule" une couche alpha avec les niveaux de gris d'une image bmp 8 bits. Ca permettrait à mon sens d'afficher un masque coloré (en relation avec ChangeAlphaIntensity() ) avec différents niveaux de transparence (c'est comme ça que je le vois).
Pour les images png avec couche alpha, il faut apparemment utiliser les sprite3D. Mais je ne cherche pas ce genre de fonctionnalité pour mon appli.
Quelqu'un aurait-il un tuto utilisant displayAlphaSprite() ?
Merci.
Re: fonctionnement de displayAlphaSprite()
Publié : lun. 13/févr./2012 17:31
par cdurand
D'ailleurs le manuel spécifie bien :
#PB_Sprite_Alpha : Le sprite est au format 8 bits (256 couleurs) en niveau de gris utilisé par DisplayAlphaSprite(), DisplayShadowSprite() ou DisplaySolidSprite()
Peut être que Photofiltre ne fournit pas le bon format...
Re: fonctionnement de displayAlphaSprite()
Publié : lun. 13/févr./2012 18:59
par Ar-S
Une image BMP peut être enregistrée en mode 8bits (couleur indexée) et la tienne a l'air valide de ce coté.
Le coté transparence Alpha du Png n'entre pas en jeu ici.
Code : Tout sélectionner
InitSprite()
OpenWindow(0,0,0,800,600,"displayAlphaSprite")
OpenWindowedScreen(WindowID(0),0,0,800,600,0,0,0)
spriteO =LoadSprite(1,"mask_256_ng.bmp")
spriteA = LoadSprite(2,"mask_256_ng.bmp",#PB_Sprite_Alpha)
;- test/
If spriteO = 0 Or spriteA = 0
Debug spriteO : Debug spriteA
EndIf
;- /test
Repeat
FlipBuffers()
ClearScreen(RGB(0,128,0))
DisplaySprite(1,100,100)
DisplayAlphaSprite(2,100,100)
Until WindowEvent() = #PB_Event_CloseWindow
FreeSprite(1)
FreeSprite(2)
j'ai essayé de compléter un peu mais sans succès. Les amateurs de 2D vont surement te répondre rapidement.
Re: fonctionnement de displayAlphaSprite()
Publié : lun. 13/févr./2012 22:26
par comtois
Tu as un exemple dans le répertoire PureBasic\Examples\Sources\Sprite_SpecialFX.PB
J'ai testé mais je ne voyais rien de spécial. Finalement en sélectionnant le sous système Directx7 dans les options du compilateur, j'ai vu fonctionner la commande DisplayAlphaSprite()
Re: fonctionnement de displayAlphaSprite()
Publié : lun. 13/févr./2012 22:41
par cdurand
Merci pour l'exemple !
Par contre, je ne vois pas où modifier la version de DirectX dans les options de compilation...
Je dois être miraud

Re: fonctionnement de displayAlphaSprite()
Publié : lun. 13/févr./2012 22:47
par comtois
Depuis le menu 'compilateur' tu vas dans 'options du compilateur...' et tu verras la fenêtre ci-dessous, et ensuite dans Bibliothèque sous-système tu tapes le texte
Directx7 , tu peux aussi choisir opengl selon ce que tu veux faire.

Re: fonctionnement de displayAlphaSprite()
Publié : lun. 13/févr./2012 22:57
par cdurand
Merci.
Effectivement, sous DirectX7 on voit des sprites. Par contre c'est drôlement lent !
Pour l'exemple que j'ai fourni plus haut, il y a des effets désastreux de décalage sur mon AlphaSprite, mais il faudrait que je compare mon image avec celle de l'exemple PB.