image sprite
image sprite
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 ?
es il possible de creer une image a partir d'une zone memoire dont on a la taille et le pointeur ?
Re: image sprite
je pense que oui, en pokant (poke()) dans l'imagegraph100 a écrit :pourquoi on ne peut pas convertir rapidement un sprite en image et vice versa ??
si ! on peut !
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 ?
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


Re: image sprite
pour mettre le sprite dans un tableau ?Dobro a écrit :si ! on peut !
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 une image il y a la librairie effect mais pour 3.94
lol
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)
Dri
(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