Page 1 sur 1

image sprite

Publié : mar. 09/janv./2007 21:58
par graph100
pourquoi on ne peut pas convertir rapidement un sprite en image et vice versa ??

es il possible de creer une image a partir d'une zone memoire dont on a la taille et le pointeur ?

Re: image sprite

Publié : mar. 09/janv./2007 23:38
par Backup
graph100 a écrit :pourquoi on ne peut pas convertir rapidement un sprite en image et vice versa ??

si ! on peut ! :D

mais pour ça il faut utiliser les point() et plot()
si tu veux faire du rapide, tu met ton sprite dans un tableau
comme ça tu evite l'utilisation repeté de la fonction point()
qui est tres tres lente en purebasic !

es il possible de creer une image a partir d'une zone memoire dont on a la taille et le pointeur ?
je pense que oui, en pokant (poke()) dans l'image
ou bien en utilisant un plot() a chaque valeur peek(é)


sinon Drac avait fait ça (je viens de te le mettre en purebasic 4.02)


  ; Code de Drac
; mis en purebasic 4.02 par Dobro
; n'oubliez pas d'indiquer une image jpg valide pour le sprite
; en ligne 16 !!

Declare CopySpriteToImage(Sprite, ImageID )
UseJPEGImageDecoder ()
#image =0
#sprite =0
;Example:
InitSprite ()

OpenScreen (1024,768,32, "TEST" )
CreateImage ( #image , 800, 800)
; on charge un sprite
LoadSprite ( #sprite , "D:\Mes_Photos\Capture_ecran\horloge.jpg" , #PB_Sprite_Memory )
;CallDebugger
CopySpriteToImage( #sprite , #image )
; apres transformation en image , on affiche l'image !!
StartDrawing ( ScreenOutput ())
DrawImage ( ImageID ( #image ),0,0,800,600)
StopDrawing ()

FlipBuffers ()
Delay (2000)


Procedure CopySpriteToImage(Sprite, ImageID )
    hdc= StartDrawing ( SpriteOutput (Sprite))
    bmp.BITMAP\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 ()
     ;UseImage(ImageID)
     StartDrawing ( ImageOutput ( ImageID ))
     DrawImage (hBmp,0,0)
     StopDrawing ()
     DeleteObject_ (hBmp)
EndProcedure


j'ai utilisé cette image :D

Image

Publié : mer. 10/janv./2007 0:02
par Flype
>> est il possible de creer une image a partir d'une zone memoire dont on a la taille et le pointeur ?

CatchImage() et CatchSprite() ? sont fait pour çà.

Publié : mer. 10/janv./2007 13:11
par graph100
merci ^^

Publié : jeu. 11/janv./2007 21:07
par graph100
ah avec le code de Dobro j'arrive a passer l'image a une dll
mais je n'arrive pas a faire le retour dll -> prog !

catchimage() ne marche pas quand l'image est chargée, existe en memoire.

Re: image sprite

Publié : sam. 13/janv./2007 13:12
par graph100
Dobro a écrit :si ! on peut ! :D

mais pour ça il faut utiliser les point() et plot()
si tu veux faire du rapide, tu met ton sprite dans un tableau
comme ça tu evite l'utilisation repeté de la fonction point()
qui est tres tres lente en purebasic !
pour mettre le sprite dans un tableau ?
pour une image il y a la librairie effect mais pour 3.94
lol

Publié : sam. 13/janv./2007 15:18
par Dr. Dri
Si ton fichier dll te retourne le handle de l'image, voila une fonction pour créer une image PB à partir de l'ID
(compatible bitmap, icon & cursor)

Code : Tout sélectionner

Procedure.l HackImage(Image.l, ImageID.l)
  Protected *ImageID.Long, Index.l
  Protected ic.IconInfo, bm.Bitmap
  
  If ImageID And Not GetIconInfo_(ImageID, ic)
    ic\hbmColor = ImageID
  EndIf
    
  If GetObject_(ic\hbmColor, SizeOf(Bitmap), bm)
    Index = CreateImage(Image, bm\bmWidth, bm\bmHeight, bm\bmBitsPixel)
    If Image <> #PB_Any : Index = Image : EndIf
    
    *ImageID = IsImage(Index)
  EndIf
  
  If *ImageID
    
    DeleteObject_(*ImageID\l)
    *ImageID\l = ImageID
    If Image = #PB_Any
      ImageID = Index
    EndIf
    
  Else
    
    If GetIconInfo_(ImageID, ic)
      If ic\fIcon
        DestroyIcon_(ImageID)
      Else
        DestroyCursor_(ImageID)
      EndIf
    Else
      DeleteObject_(ImageID)
    EndIf
    ImageID = #Null
    
  EndIf
  
  ProcedureReturn ImageID
EndProcedure

#Mon_Image = 1

IconID = LoadIcon_(#Null, #IDI_APPLICATION)

HackImage(#Mon_Image, IconID)

If OpenWindow(0, 0, 0, 245, 105, "ImageGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CreateGadgetList(WindowID(0))
  ImageGadget(0,  10, 10, 100, 83, ImageID(#Mon_Image))
  ImageGadget(1, 130, 10, 100, 83, ImageID(#Mon_Image), #PB_Image_Border)
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Dri

Publié : sam. 13/janv./2007 21:08
par graph100
ok je vais voir ca !!
merci