onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Ouvrir un fichier bitmap 24bit octets par octets Sam 5 Déc 2009 - 16:43 | |
| Voila une fonction qui lit les bmp 24bits octets par octets . Cette fonction retourne l'id de la surface ou est stockée l'image. Cette fonction est juste dans un but de compréhension de la structure des fichiers bmp , donc n'est pas faite pour être utilisé dans un projet. (GM étant lent dans la lecture des fichiers et aussi dans la gestion des surfaces) Attention : ne pas lire un bimap trop grand pour ne pas attendre trop longtemps lors du chargement. Voici la fonction : Load_bmp24(filename) - Code:
-
var f, surf, w, h, color, i, a; f = file_bin_open(argument0,0)
if(file_bin_read_byte(f) != 66) show_error("File isn't .bmp", 0)
file_bin_seek(f,18)
w = (file_bin_read_byte(f) ) + (file_bin_read_byte(f)<<08) +(file_bin_read_byte(f)<<16) + (file_bin_read_byte(f)<<24) if(!w) show_error('Error',0)
h = (file_bin_read_byte(f) ) + (file_bin_read_byte(f)<<08) +(file_bin_read_byte(f)<<16) + (file_bin_read_byte(f)<<24) if(!h) show_error('Error',0)
file_bin_seek(f,28) if(file_bin_read_byte(f) != 24) show_error('Wrong depth color',0)
surf = surface_create(w,h) surface_set_target(surf) file_bin_seek(f,54)
for(i=0 ; i<h ; i+=1) { for(a=0 ; a<w ; a+=1) { color = (file_bin_read_byte(f)<<16) + (file_bin_read_byte(f)<<08) + (file_bin_read_byte(f) ) draw_point_color(a,h-i,color) } for(a=0 ; a<w mod 4 ; a+=1) file_bin_read_byte(f); } surface_reset_target()
file_bin_close(f) return surf
Pour voir l'image utilisés draw_surface et n'oubliez pas de liberer la surface. Bien entendu ceci ne s'adresse qu'au programmeurs chevronnés :p_lol: Sinon @++ :p_bye: |
|