Page 1 sur 1

Créer une image à partir d'un sprite

Publié : mar. 20/oct./2009 16:42
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.

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

Publié : mer. 21/oct./2009 8:18
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 !

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

Publié : mer. 21/oct./2009 9:52
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.

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

Publié : mer. 21/oct./2009 10:37
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

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

Publié : mer. 21/oct./2009 18:59
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)

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

Publié : mer. 21/oct./2009 19:04
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