Créer une image à partir d'un sprite

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Créer une image à partir d'un sprite

Message par Octavius »

Voilà une toute petite procédure (pour PB4.31) qui m'a été très utile récemment, elle permet de convertir ou plus exactement de copier un sprite dans une image :

Code : Tout sélectionner

Procedure CreateImageFromSprite(Image.l,Sprite.l)
  Protected hDC.l,Bmp.BITMAP,hBmp.l
  If IsSprite(Sprite)
    hDC=StartDrawing(SpriteOutput(Sprite))
    Bmp\bmWidth=SpriteWidth(Sprite)
    Bmp\bmHeight=SpriteHeight(Sprite)
    Bmp\bmPlanes=1
    Bmp\bmBitsPixel=GetDeviceCaps_(hDC,#BITSPIXEL)
    Bmp\bmBits=DrawingBuffer()
    Bmp\bmWidthBytes=DrawingBufferPitch()
    hBmp=CreateBitmapIndirect_(Bmp)
    StopDrawing()
    CreateImage(Image,SpriteWidth(Sprite),SpriteHeight(Sprite))
    StartDrawing(ImageOutput(Image))
    DrawImage(hBmp,0,0)
    StopDrawing()
    DeleteObject_(hBmp)
  EndIf
EndProcedure
Dommage que ce genre de fonction n'existe pas native dans PureBasic, j'ai longtemps galéré avant d'être à l'aise pour transformer une image en sprite et vice-versa.
Dernière modification par Octavius le mer. 21/oct./2009 9:59, modifié 1 fois.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Créer une image à partir d'un sprite

Message par Thyphoon »

Octavius a écrit :Voilà une toute petite procédure (pour PB4.31) qui m'a été très utile récemment, elle permet de convertir ou plus exactement de copier un sprite dans une image :

Dommage que ce genre de fonction n'existe pas native dans PureBasic, j'ai longtemps galéré avant d'être à l'aise pour transformer une image en sprite et vice-versa.
Moi j'avais trouvé la solution de dessiné l'image a l'ecran et de faire un grabsprite. On perd les infos de couche Alpha par contre... mais entre 2 rafraichissement d'écran ça ne se voit pas !
En tout cas merci pour la procédure, c'est toujours bon ces petits bout de code !
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Re: Créer une image à partir d'un sprite

Message par Octavius »

Thyphoon a écrit :Moi j'avais trouvé la solution de dessiné l'image a l'ecran et de faire un grabsprite
Pour transformer une image en sprite il suffit de créer un sprite de la même taille que l'image et de dessiner dessus, pas besoin de passer par l'écran !

Code : Tout sélectionner

CreateSprite(#Sprite,ImageWidth(#Image),ImageHeight(#Image))
StartDrawing(SpriteOutput(#Sprite))
  DrawImage(ImageID(#Image),0,0)
StopDrawing()
Par contre on ne peut pas faire l'inverse, il n'existe pas de fonction DrawSprite() pour dessiner un sprite sur une image par exemple, donc la conversion est beaucoup plus galère dans ce sens. Et on ne peut pas passer par l'écran non plus parce que GrabImage(), contrairement à GrabSprite(), demande une autre image comme argument.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Créer une image à partir d'un sprite

Message par Thyphoon »

oui lollllllll je me suis planté ... :oops:

C'est je trace mes sprites a l'écran et je fais un grabimage Lollllllllllll faut que j'arrête la moquette lolllllll :P
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Re: Créer une image à partir d'un sprite

Message par Octavius »

Comment fais-tu un GrabImage sur l'écran ? :?

D'après l'aide de PureBaisc :
Resultat = GrabImage(#Image1, #Image2, x, y, Largeur, Hauteur)
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: Créer une image à partir d'un sprite

Message par Thyphoon »

Octavius a écrit :Comment fais-tu un GrabImage sur l'écran ? :?

D'après l'aide de PureBaisc :
Resultat = GrabImage(#Image1, #Image2, x, y, Largeur, Hauteur)
Faut que je retrouve ma source ! je sais que j'avais rencontré le problème je vais faire des recherches ce week-end car je ne suis pas chez moi pour l'instant
Répondre