Voici un code que j’avais utilisé dans un jeu.
Il permet de charger des images, et de les compresser en mémoire.
Bon… je sais qu’il n’est pas très utile comme ça, car il est fait sur mesure pour mon programme. Mais ça peut vous donner des idées.

Utilisez le CPU monitor, pour voir la différence
Code : Tout sélectionner
;==========================
;| By Mytic
;| pb v4.1
;==========================
;===========(Attention ; la palette ne dépasse pas les 196 couleurs au total
; donc utilisez des images dessinées avec paint ou autre, et non pas des photos.)
UseJPEGImageDecoder()
Global Dim cpi_palette.l(1,99)
Global cpi_maxp.c = 0
Global cpi_maxc.c = 0
Global Dim cpi_image.l(99)
; couleur = PCC (P = palette , CC = numéro couleur) sur 1 oct.
Procedure.c cpi_loadimage(cpi_num.l,file.s)
cpi_im.l = LoadImage(#PB_Any,file)
cpi_imW.l = ImageWidth(cpi_im)
cpi_imH.l = ImageHeight(cpi_im)
cpi_cmem.l = 0
pl.l = 0
cpi_image(cpi_num) = AllocateMemory((cpi_imW * cpi_imH) + 8)
PokeL(cpi_image(cpi_num)+pl,cpi_imW)
pl+4
PokeL(cpi_image(cpi_num)+pl,cpi_imH)
pl+4
StartDrawing(ImageOutput(cpi_im))
For cpi_y = 0 To cpi_imH
For cpi_x = 0 To cpi_imW
cpi_GCoul = Point(cpi_x,cpi_y)
Goto cpi__palleter:cpi_next:
Next cpi_x
Next cpi_y
StopDrawing()
FreeImage(cpi_im)
ProcedureReturn 1
cpi__palleter:
For cpi_p = 0 To cpi_maxp
For cpi_c = 0 To cpi_maxc
If cpi_palette(cpi_p,cpi_c) = cpi_GCoul
PokeC(cpi_image(cpi_num)+pl, cpi_p*100 + cpi_c):pl+1
Goto cpi_next
EndIf
Next cpi_c
Next cpi_p
If cpi_maxc < 99
cpi_maxc+1
Else
cpi_maxc = 0
If cpi_maxp < 1
cpi_maxp+1
Else
Goto cpi_next
EndIf
EndIf
cpi_palette(cpi_maxp,cpi_maxc) = cpi_GCoul
PokeC(cpi_image(cpi_num)+pl, cpi_maxp*100 + cpi_maxc ):pl+1
;ELSE = palette full
Goto cpi_next
EndProcedure
Procedure cpi_display(cpi_im.l,cpi_px,cpi_py)
pl.l = 0
cpi_imW.l = PeekL(cpi_image(cpi_im)+pl)
pl+4
cpi_imH.l = PeekL(cpi_image(cpi_im)+pl)
pl+4
;Debug cpi_imH
For cpi_y = 0 To cpi_imH
For cpi_x = 0 To cpi_imW
cpi_peek.c = PeekC(cpi_image(cpi_im)+pl):pl+1
;Debug cpi_peek
cpi_nump.c = cpi_peek / 100
cpi_numc.c = cpi_peek % 100
cpi_SCoul.l = cpi_palette(cpi_nump,cpi_numc)
Plot(cpi_px+cpi_x,cpi_py+cpi_y,cpi_SCoul)
Next cpi_x
Next cpi_y
EndProcedure
;=========test avec CPI
;Goto cpi
;..................
;============(pour ce cas , les images on une taille de 8,13 Mo dans la RAM)
LoadImage(1,"c:\image.bmp")
LoadImage(2,"c:\image2.bmp")
LoadImage(3,"c:\304887368.jpg")
Delay(5000)
End
cpi:
;============(pour ce cas , les images ont une taille de 1,70 Mo dans la RAM)
cpi_loadimage(1,"c:\image.bmp")
cpi_loadimage(2,"c:\image2.bmp")
cpi_loadimage(3,"c:\304887368.jpg")
OpenWindow(1,10,10,640,480,"test")
Delay(2000)
StartDrawing(WindowOutput(1))
cpi_display(2,10,10)
StopDrawing()
Delay(10000)
CloseWindow(1)
Delay(5000)