| Fonction couleur BMP | |
|
|
Auteur | Message |
---|
Invité Invité
| Sujet: Fonction couleur BMP Mer 19 Jan 2011 - 14:08 | |
| Bonjour, je cherche une fonction qui retourne la couleur du pixel à une position (x,y) dans une fichier bitmap (ou bien PNG si c'est possible). Un peu comme la fonction draw_getpixel, mais dans un fichier bitmap sans l'afficher à l'écran. Je sais que c'est possible en bidouillant avec les fonctions de fichiers binaire, mais je ne sais pas comment est structuré un fichier bitmap. Merci d'avance à Invité
Dernière édition par NVR le Jeu 20 Jan 2011 - 9:40, édité 1 fois |
|
| |
louckas Utilisateur confirmé: Rang *
Messages : 296 Projet Actuel : Ultimate worms
| Sujet: Re: Fonction couleur BMP Mer 19 Jan 2011 - 14:13 | |
| tu peux ouvrir ton image dans un sprite et aller chercher dans se sprite la |
|
| |
blendman Utilisateur confirmé: Rang **
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
| Sujet: Re: Fonction couleur BMP Mer 19 Jan 2011 - 14:26 | |
| alors, moi, en png, ça m'intéresse ce genre de chose (pas dans GM, car c'est méga trop long si on veut connaitre tous les pixels d'une image avec draw_getpixel()).
|
|
| |
Vivi Utilisateur confirmé: Rang **
Messages : 321 Localisation : dans ma chambre Projet Actuel : ogc²
| Sujet: Re: Fonction couleur BMP Mer 19 Jan 2011 - 17:27 | |
| Bin le format bmp est pas très compliqué. Un code C qui lit tout les pixels d'un bmp : - Code:
-
int offset,width,height,i,read; char temp; char header[54]; char *bytes; FILE* f=fopen(filename,"rb"); if(f == NULL) return 0; fread(header,54,1,f); offset=((int)header[10])+((int)header[11] << 8)+((int)header[12] << 16)+((int)header[13] << 24); width=((int)header[18])+((int)header[19] << 8)+((int)header[20] << 16)+((int)header[21] << 24); height=((int)header[22])+((int)header[23] << 8)+((int)header[24] << 16)+((int)header[25] << 24); bytes=(char*)malloc(width*height*3); if (fseek(f,offset,SEEK_SET)){ fclose(f); return 0; } read = fread(bytes,3,width*height,f); if (read != width*height){ fclose(f); return 0; } for(i=0;i<width*height*3;i+=3){ temp=bytes[i]; bytes[i]=bytes[i+2]; bytes[i+2]=temp; } fclose(f); Alors donc un bmp c'est une en-tête de 54 octet et puis c'est les pixels directement. Les pixels sont écrit du point inférieur droit jusqu'au point supérieur gauche. 3 octet par pixel si c'est du rgb. donc si tu a une image 64 x 64 et que tu veux le pixel 23,32 c'est : (32x64+23)*3+offset et là tu as la position absulue. L'offset est en position 10 (c'est un int 4 octet). Pour connaître la taille de l'image il y a des int à la position 18 et 22. aussi, c'est pas du rgb mais du bgr, je crois que c'est tout ce que tu as à savoir. |
|
| |
blendman Utilisateur confirmé: Rang **
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
| Sujet: Re: Fonction couleur BMP Mer 19 Jan 2011 - 19:05 | |
| dis moi, Vivicool, toi qui m'as l'air de bien t'y connaitre en format d'image, crois-tu qu'il serait difficle de faire ce genre de chose (dll ou exe, "pilotable" depuis Gm, avec par exemple : execute_programm()) : - lecture d'un fichier *.png (une image) - on vérifie pour chaque pixel le pourcentage d'alpha. Si l'alpha =0 ou =1 on passe au suivant. Si alpha>0 et <1, on change le pixel (rgb) de la manière suivante : on lui enlève lme %de noir (en fonction de l'alpha trouvé) - à la fin, on enregistre un nouveau fichier png (ou on écrase le même) l'idée serait de créer un convertisseur png avec alpha prémultiplié > png alpha straight. Ca me serait très utile pour mon logiciel 2D . A moins que ça ne soit déjà possible avec un petit programme ou une dll. J'ai voulu essayé avec silent.dll et irfan, mais hélas, le paramètre de sauvegarde de l'alpha straight n'est pas disponible en ligne de commande . |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Fonction couleur BMP Mer 19 Jan 2011 - 19:13 | |
| Avec une dll c'est pas compliqué, suffit de prendre une lib qui est capable de lire les png, ensuite tu n'auras plus qu'a faire tes modifs sur l'array obtenu et y te resteras qu'a tout remettre en png |
|
| |
blendman Utilisateur confirmé: Rang **
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
| |
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Fonction couleur BMP Mer 19 Jan 2011 - 20:01 | |
| Pas besoin de compétences de fou. Suffit de savoir utiliser une librairie. Enfin la je passe mes partielles puis après je pourrais essayer de te faire ça si j'ai le temps :p |
|
| |
Vivi Utilisateur confirmé: Rang **
Messages : 321 Localisation : dans ma chambre Projet Actuel : ogc²
| Sujet: Re: Fonction couleur BMP Mer 19 Jan 2011 - 20:08 | |
| Il me semble que dans le tuto C du site du zero il y a un getPixel qui est donné, tu devrais commencer par là. |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Fonction couleur BMP Mer 19 Jan 2011 - 20:12 | |
| Sauf que ça inclus d'utiliser la SDL , ce que je pense inutile pour faire une dll de ce genre. Suffit juste de trouver une lib pour charger un png dans un array, et le sauvegarder aussi. |
|
| |
Vivi Utilisateur confirmé: Rang **
Messages : 321 Localisation : dans ma chambre Projet Actuel : ogc²
| Sujet: Re: Fonction couleur BMP Mer 19 Jan 2011 - 20:20 | |
| probablement , mais tant qu'a faire une dll il pourrait directe refaire tout son programme de dessin en SDL non ? |
|
| |
[TheDarkTiger] Modérateur
Messages : 7420 Localisation : Essonne
| Sujet: Re: Fonction couleur BMP Mer 19 Jan 2011 - 20:28 | |
| je n'ai hélas pas le temps de faire mieux, je poste en vrac : - Code:
-
// * argument0 : nom du ficher BMP (l'extention importe peu) // argument1 : x //argument2 : Y
var FILE,FILE_NAME,MATRIX; var TX,TY,BMP_STR,ALT,ALT_MAX; var SIZE,BPC,TRASH; var OPTS,OPT_DISP,OPT_24;
FILE_NAME=string(argument0); X=argument1; Y=argument2;
if(FILE_NAME=="") { show_message("Aucun fichier spécifié."); return -1; break; } if(!file_exists(FILE_NAME)) { show_message("Fichier inexistant."); return -2; break; }
FILE=file_text_open_read(FILE_NAME) if(string_copy(file_text_read_string(FILE),1,2)!="BM") { file_text_close(FILE); show_message("Fichier non BMP."); return -3; break; } file_text_close(FILE);
//Si debug BMP_STR="Fichier BMP#";
//Lecture FILE =file_bin_open(FILE_NAME,0); TRASH=file_bin_read_short(FILE); SIZE =file_bin_read_long(FILE); TRASH=file_bin_read_long(FILE); TRASH=file_bin_read_long(FILE); // TRASH=file_bin_read_long(FILE); TX = file_bin_read_long(FILE); TY = file_bin_read_long(FILE); TRASH=file_bin_read_short(FILE); BPC = file_bin_read_short(FILE); TRASH=file_bin_read_long(FILE); TRASH=file_bin_read_long(FILE); TRASH=file_bin_read_long(FILE);//def x TRASH=file_bin_read_long(FILE);//dex y TRASH=file_bin_read_long(FILE); TRASH=file_bin_read_long(FILE);
//Palette if(BPC<17) { for(i=0;i<power(2,BPC);i+=1) { TRASH=file_bin_read_long(FILE); } }
//Si debug //BMP_STR=BMP_STR+"Taille réele : "+string(file_bin_size(FILE))+" octets #"; BMP_STR=BMP_STR+"Taille théorique : "+string(SIZE)+" octets #"; BMP_STR=BMP_STR+string(TX)+" * "+string(TY)+" ("+string(BPC)+" bits)#";
if(X>TX || Y>TY) { file_text_close(FILE); show_message("Coordonées hors image."); return -4; break; }
Y=TY-Y; TX = ceil(TX/4)*4:
file_bin_seek(FILE,54 + X + (TX*Y));
B=file_bin_read_byte(FILE); G=file_bin_read_byte(FILE); R=file_bin_read_byte(FILE);
file_bin_close(FILE); if(OPT_DISP==1){show_message(BMP_STR);} return make_color_rgb(R,G,B); J'ai modifié à l'arrache une de mes fonctions... il faudra rajouter aussi ces fonctions : file_bin_read_short //Retourne un short (2 octets) var val,F; F=argument0; val = file_bin_read_byte(F); val+=$100*file_bin_read_byte(F); return val; et file_bin_read_long //Retourne un long (4 octets) var val,F; F=argument0; val = file_bin_read_byte(F); val+=$100 *file_bin_read_byte(F); val+=$10000 *file_bin_read_byte(F); val+=$1000000*file_bin_read_byte(F); return val; _________________ Bonne chance pour vos projets actuels ! Prêt à aider ceux qui en ont besoin ^^ l'antiqueBienvenue au 2630eme utilisateur : Mike Kennedy ! |
|
| |
Invité Invité
| Sujet: Erreur de script Jeu 20 Jan 2011 - 9:53 | |
| Il y a une erreur sur ton script.
Un message d'erreur me signal que la variable OPT_DISP n'existe pas, pourtant cette variable à bien été déclarée.
Est-ce que quelqu'un à la solution ? |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Fonction couleur BMP Jeu 20 Jan 2011 - 10:16 | |
| |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Fonction couleur BMP Jeu 20 Jan 2011 - 14:30 | |
| merci de ne PAS utiliser la balise username en dehors de oma, ou A LA LIMITE dans la signature... _________________ Tous les icones de gm utilisables sur le cbna ICI |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Fonction couleur BMP Jeu 20 Jan 2011 - 14:36 | |
| Toute façon c'est simple de voir si c'est une username ou non, la plupart du temps les gens mettent une majuscule au nom d'un autre membre quand ils l'ecrivent. Hors moi j'ai pas de majuscule, la balise ne fonctionne pas sur moi héhé. |
|
| |
Topaze22 *Excellent utilisateur*
Messages : 6213 Localisation : Sur la Lune Projet Actuel : Projet HELLO/TOPAZE22 Mario Bros World
| Sujet: Re: Fonction couleur BMP Sam 22 Jan 2011 - 22:54 | |
| Quand j'ai lu le premier post, le username m'a fait peur 5s, je me suis dis "mais je suis totalement incapable de faire ce qu'il demande XD". Je me demande comme fais TheDarkTiger pour sortir tout le temps et partout ce genre de code. A croire que c'est lui qui a fait le monde en 6 jours (et oui, il s'est reposé le 7ème il me semble). Bon, heureux que l'on s'occupe de toi, je repars voyager dans le forum ^^ _________________ Topique pour le Projet Hello Mario en préparation. Sorti du topique lorsque la première démo sera disponible.
|
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Fonction couleur BMP Sam 22 Jan 2011 - 23:17 | |
| Je dirais que TDT est un des rares gars du forum qui s'interesse a des choses un peu bas niveau. Perso je connais pleins de personnes qui connaissent le format bmp parfaitement, pis il est vraiment très simple, c'est du brut sans aucune compression. C'est sur que pour des personnes qui ont jamais pris la peine de dl un editeur héxa pour trifouiller partout ça peu faire peur mais bon quand même voila quoi...
Moi je tire mon chapeau a celui qui arriveras a lire un png ou un jpg bit a bit avec GM par contre :p |
|
| |
Contenu sponsorisé
| Sujet: Re: Fonction couleur BMP | |
| |
|
| |
| Fonction couleur BMP | |
|