| Fonction couleur BMP | |
|
|
Auteur | Message |
---|
Invité Invité
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | 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é ![Fonction couleur BMP 891243](https://2img.net/u/3412/18/80/54/smiles/891243.png)
Dernière édition par NVR le Jeu 20 Jan 2011 - 9:40, édité 1 fois |
|
![Aller en bas](https://2img.net/i/empty.gif) | |
louckas Utilisateur confirmé: Rang *
![louckas](https://2img.net/u/3412/18/80/54/avatars/1548-19.gif)
Messages : 296 Projet Actuel : Ultimate worms
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | 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 |
|
![Aller en bas](https://2img.net/i/empty.gif) | |
blendman Utilisateur confirmé: Rang **
![blendman](https://2img.net/u/3412/18/80/54/avatars/808-6.jpg)
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | 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()).
|
|
![Aller en bas](https://2img.net/i/empty.gif) | |
Vivi Utilisateur confirmé: Rang **
![Vivi](https://2img.net/u/3412/18/80/54/avatars/779-39.png)
Messages : 321 Localisation : dans ma chambre Projet Actuel : ogc²
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | 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. |
|
![Aller en bas](https://2img.net/i/empty.gif) | |
blendman Utilisateur confirmé: Rang **
![blendman](https://2img.net/u/3412/18/80/54/avatars/808-6.jpg)
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | 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 ![Very Happy](https://2img.net/i/fa/i/smiles/icon_biggrin.png) . 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 ![Sad](https://2img.net/i/fa/i/smiles/icon_sad.gif) . |
|
![Aller en bas](https://2img.net/i/empty.gif) | |
onilink_ Modérateur
![onilink_](https://2img.net/u/3412/18/80/54/avatars/1012-85.png)
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | 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 ![Wink](https://2img.net/i/fa/i/smiles/icon_wink.gif) |
|
![Aller en bas](https://2img.net/i/empty.gif) | |
blendman Utilisateur confirmé: Rang **
![blendman](https://2img.net/u/3412/18/80/54/avatars/808-6.jpg)
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | |
![Aller en bas](https://2img.net/i/empty.gif) | |
onilink_ Modérateur
![onilink_](https://2img.net/u/3412/18/80/54/avatars/1012-85.png)
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | 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 |
|
![Aller en bas](https://2img.net/i/empty.gif) | |
Vivi Utilisateur confirmé: Rang **
![Vivi](https://2img.net/u/3412/18/80/54/avatars/779-39.png)
Messages : 321 Localisation : dans ma chambre Projet Actuel : ogc²
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | 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à. |
|
![Aller en bas](https://2img.net/i/empty.gif) | |
onilink_ Modérateur
![onilink_](https://2img.net/u/3412/18/80/54/avatars/1012-85.png)
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | 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. |
|
![Aller en bas](https://2img.net/i/empty.gif) | |
Vivi Utilisateur confirmé: Rang **
![Vivi](https://2img.net/u/3412/18/80/54/avatars/779-39.png)
Messages : 321 Localisation : dans ma chambre Projet Actuel : ogc²
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | Sujet: Re: Fonction couleur BMP Mer 19 Jan 2011 - 20:20 | |
| probablement ![mop](/users/3412/18/80/54/smiles/235688.png) , mais tant qu'a faire une dll il pourrait directe refaire tout son programme de dessin en SDL non ? |
|
![Aller en bas](https://2img.net/i/empty.gif) | |
[TheDarkTiger] Modérateur
![[TheDarkTiger]](https://2img.net/u/3412/18/80/54/avatars/78-67.gif)
Messages : 7420 Localisation : Essonne
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | 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; |
|
![Aller en bas](https://2img.net/i/empty.gif) | |
Invité Invité
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | 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 ? |
|
![Aller en bas](https://2img.net/i/empty.gif) | |
onilink_ Modérateur
![onilink_](https://2img.net/u/3412/18/80/54/avatars/1012-85.png)
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | Sujet: Re: Fonction couleur BMP Jeu 20 Jan 2011 - 10:16 | |
| |
|
![Aller en bas](https://2img.net/i/empty.gif) | |
M@d_Doc Modérateur
![M@d_Doc](https://2img.net/u/3412/18/80/54/avatars/7-77.png)
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | 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... |
|
![Aller en bas](https://2img.net/i/empty.gif) | |
onilink_ Modérateur
![onilink_](https://2img.net/u/3412/18/80/54/avatars/1012-85.png)
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | 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é. |
|
![Aller en bas](https://2img.net/i/empty.gif) | |
Topaze22 *Excellent utilisateur*
![Topaze22](https://2img.net/u/3412/18/80/54/avatars/709-56.jpg)
Messages : 6213 Localisation : Sur la Lune Projet Actuel : Projet HELLO/TOPAZE22 Mario Bros World
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | 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 ^^ |
|
![Aller en bas](https://2img.net/i/empty.gif) | |
onilink_ Modérateur
![onilink_](https://2img.net/u/3412/18/80/54/avatars/1012-85.png)
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | 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 |
|
![Aller en bas](https://2img.net/i/empty.gif) | |
Contenu sponsorisé
![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | Sujet: Re: Fonction couleur BMP ![Fonction couleur BMP Empty](https://2img.net/i/empty.gif) | |
| |
|
![Aller en bas](https://2img.net/i/empty.gif) | |
| Fonction couleur BMP | |
|