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 !
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

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 !
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