je part du principe que dans tes images en 7000x7000 tu as plusieurs sprites sinon tu as beau faire ca changera rien.
donc premierement tu decoupe tes images en plein d'images de petite taille que tu sauve dans un repertoire
fichier1.png
fichier2.png
fichier3.png
etc..
donc au lieu d'avoir une grosse image en 7000x7000 tu vas avoir une multitude d'images toute petites
tu ecrit dans une liste chainée tout les noms des fichiers ainsi généres et leur (taille additionée-la taille du fichier actuel) ce qui donne la position dans le fichier en octet (a l'aide d'une structure) ainsi que leur taille
exemple
fichier1.png 1000 octets
fichier2.png 1000 octets
la liste chainée contiendra
file : fichier1.png
offset : 0
taille : 1000
file : fichier2.png
offset : 1000
taille : 1000
ensuite tu cree un fichier qui vas contenir toute tes petites images en png
par exemple 'mesprites.dat'
au debut de ce fichier tu sauve le nombre de fichier, la taille totale en octets puis le contenu de ta liste chainée
puis tu charge en memoire (pas comme une image) chaque fichier et tu sauve le contenu de la memoire a la suite du fichier 'mesprites.dat'
tu vas te retrouver a nouveau avec un gros fichier qui contiens tout tes sprites toujours au format png.
ensuite pour utiliser le fichier ainsi crée tu ouvre le fichier 'mesprite.dat'
tu lis le nombre d'entrées
tu lis la taille totale des images
tu charge la liste chainée
tu cree un buffer de la taille totale des images
tu charge en memoire le reste du fichier avec un
readdata(#file,buffer,size)
ensuite tu peux utiliser tes images en faisant un catchimage ou un catchsprite (#image,buffer+offset ,taille)
rien ne t'empeche de faire une procedure loadmemsprite(sprite,"fichier")
qui recherche le nom de fichier dans la liste chainée
puis effectue le catchprite / catchimage
juste une idée
bien sur le fait que les header png des images sont repetes pour chaque image ca risque de faire un poil plus gros que l'image originale mais a mon avis rien de comparable a l'image decompressee