AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment :
Nike : Jusqu’à 50% sur les articles de ...
Voir le deal

 

 Lire un fichier bmp

Aller en bas 
AuteurMessage
M@d_Doc
Modérateur
M@d_Doc


Messages : 6600
Localisation : 47°44'8.04
Projet Actuel : aucun

Lire un fichier bmp Empty
MessageSujet: Lire un fichier bmp   Lire un fichier bmp EmptyMer 14 Sep 2011 - 15:39

Comment faire un draw_getpixel() plus rapide sans avoir à afficher des trucs à l'écran?

Je viens de faire un petit pack de scripts permettant de choper directement la couleur d'un pixel à l'intérieur d'un fichier bmp 24 bit classique.
Il me semble avoir déjà vu ça quelquepart sous forme de DLL, mais je trouvais intéressant de le refaire purement en gml... et ça marche :p

Le principal avantage, c'est surtout que c'est pas mal plus rapide que la fonction de base de GM (voir screens).
Réalisé dans une room à 900fps, avec pour seul différence, la méthode de récupation de couleur:
Lire un fichier bmp With_bmpRead
Lire un fichier bmp With_native

Un des autres avantages qui me vient juste à l'esprit, c'est qu'il est possible de choper la couleur de quelquechose sans avoir à l'afficher à l'écran, et ça, c'est quand même vachement plus propre.

J'ai essayé de simplifier au maximum l'utilisation des scripts. En gros, voilà la marche à suivre :

Au début de la room, il faut 'charger' le bmp :
Code:
my_bmp = bmp_open('nomDuBMP.bmp')

Quand on veux une couleur.... on la cherche, pardi!

Code:
color = bmp_get_color(my_bmp,x,y)

Et quand on a fini (fin de la room, fin du jeu...)
Code:
bmp_close(my_bmp)

J'ai aussi prévu des fonctions supplémentaires, pour ceux qui veulent vraiment fouiner dans le bmp :

bmp_get_offset(bmp) : retourne à quel index commence le data field (la première adresse où se trouve les infos couleurs dans le bmp)
bmp_get_width(bmp) : retourne la largeur (en pixels) du bmp
bmp_get_height(bmp) : je vous laisse deviner

bmp_read(bmp,index,length) : retourne un nombre, correspondant à la chaine hexa commencant en 'index', sur une longueur de 'length' bytes.
C'est fonction est relativement pratique, car gm donne un integer quand on lit un byte, qu'il faut passer en hexa, retourner (spécial dédicace à little endian), et assembler les différends bytes (toujours en hexa inversé, vous suivez?), puis tout remettre en nombre décimal.


Ah oui, un lien de téléchargement.

Dans le zip, il y a un .exe et un gmk de démonstration, un fichier bmp et les deux screens ci dessus.
Ah oui : si vous dézippez pas, ça marchera pas : faut avoir accès au bmp pour... lire dans le bmp.

_________________
Lire un fichier bmp Control_commentTous les icones de gm utilisables sur le cbna ICI Lire un fichier bmp Main1_change_sprite
Revenir en haut Aller en bas
http://www.lecbna.org
 
Lire un fichier bmp
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Scripts GML-
Sauter vers: