AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  

 

 Fonction couleur BMP

Aller en bas 
+3
Vivi
blendman
louckas
7 participants
AuteurMessage
Invité
Invité




Fonction couleur BMP Empty
MessageSujet: Fonction couleur BMP   Fonction couleur BMP EmptyMer 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


Dernière édition par NVR le Jeu 20 Jan 2011 - 9:40, édité 1 fois
Revenir en haut Aller en bas
louckas
Utilisateur confirmé: Rang *
louckas


Messages : 296
Projet Actuel : Ultimate worms

Fonction couleur BMP Empty
MessageSujet: Re: Fonction couleur BMP   Fonction couleur BMP EmptyMer 19 Jan 2011 - 14:13

tu peux ouvrir ton image dans un sprite et aller chercher dans se sprite la

_________________
Fonction couleur BMP 16886
bneige bneige bneige bneige bneige
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

Fonction couleur BMP Empty
MessageSujet: Re: Fonction couleur BMP   Fonction couleur BMP EmptyMer 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()).

Revenir en haut Aller en bas
http://blendman.blogspot.com/
Vivi
Utilisateur confirmé: Rang **
Vivi


Messages : 321
Localisation : dans ma chambre
Projet Actuel : ogc²

Fonction couleur BMP Empty
MessageSujet: Re: Fonction couleur BMP   Fonction couleur BMP EmptyMer 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.
Revenir en haut Aller en bas
http://www.opengamecreator.com
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

Fonction couleur BMP Empty
MessageSujet: Re: Fonction couleur BMP   Fonction couleur BMP EmptyMer 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.

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.

Revenir en haut Aller en bas
http://blendman.blogspot.com/
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Fonction couleur BMP Empty
MessageSujet: Re: Fonction couleur BMP   Fonction couleur BMP EmptyMer 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

_________________
Fonction couleur BMP Runningpotato1Fonction couleur BMP TvF6GED Fonction couleur BMP MdetltS
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

Fonction couleur BMP Empty
MessageSujet: Re: Fonction couleur BMP   Fonction couleur BMP EmptyMer 19 Jan 2011 - 19:56

onilink_ a écrit:
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
ok, mais tout ça je ne sais pas faire Razz
Je connais bien un peu la SDL, mais juste afficher un png, c'est tout Smile
Revenir en haut Aller en bas
http://blendman.blogspot.com/
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Fonction couleur BMP Empty
MessageSujet: Re: Fonction couleur BMP   Fonction couleur BMP EmptyMer 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

_________________
Fonction couleur BMP Runningpotato1Fonction couleur BMP TvF6GED Fonction couleur BMP MdetltS
Revenir en haut Aller en bas
Vivi
Utilisateur confirmé: Rang **
Vivi


Messages : 321
Localisation : dans ma chambre
Projet Actuel : ogc²

Fonction couleur BMP Empty
MessageSujet: Re: Fonction couleur BMP   Fonction couleur BMP EmptyMer 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à.
Revenir en haut Aller en bas
http://www.opengamecreator.com
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Fonction couleur BMP Empty
MessageSujet: Re: Fonction couleur BMP   Fonction couleur BMP EmptyMer 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.

_________________
Fonction couleur BMP Runningpotato1Fonction couleur BMP TvF6GED Fonction couleur BMP MdetltS
Revenir en haut Aller en bas
Vivi
Utilisateur confirmé: Rang **
Vivi


Messages : 321
Localisation : dans ma chambre
Projet Actuel : ogc²

Fonction couleur BMP Empty
MessageSujet: Re: Fonction couleur BMP   Fonction couleur BMP EmptyMer 19 Jan 2011 - 20:20

probablement mop, mais tant qu'a faire une dll il pourrait directe refaire tout son programme de dessin en SDL non ?
Revenir en haut Aller en bas
http://www.opengamecreator.com
[TheDarkTiger]
Modérateur
[TheDarkTiger]


Messages : 7420
Localisation : Essonne

Fonction couleur BMP Empty
MessageSujet: Re: Fonction couleur BMP   Fonction couleur BMP EmptyMer 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 ^^
Fonction couleur BMP U3dfr2Fonction couleur BMP Sign l'antique
Bienvenue au 2630eme utilisateur : Mike Kennedy !
Revenir en haut Aller en bas
http://www.tdms.fr
Invité
Invité




Fonction couleur BMP Empty
MessageSujet: Erreur de script   Fonction couleur BMP EmptyJeu 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 ?
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Fonction couleur BMP Empty
MessageSujet: Re: Fonction couleur BMP   Fonction couleur BMP EmptyJeu 20 Jan 2011 - 10:16

ohoh le vilain, utiliser username ici :p

Pourquoi ne pas coder toi même cette fonction, c'est très simple a si tu n'est pas capable de le faire bah ça te ferais beaucoup évoluer.
Format bmp : http://www.commentcamarche.net/contents/video/format-bmp.php3
http://www.digicamsoft.com/bmp/bmp.html
http://en.allexperts.com/q/C-1587/read-BMP.htm
...

Bref si t'arrive a rien avec ça c'est que ton problème est pas si important que ça.

_________________
Fonction couleur BMP Runningpotato1Fonction couleur BMP TvF6GED Fonction couleur BMP MdetltS
Revenir en haut Aller en bas
M@d_Doc
Modérateur
M@d_Doc


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

Fonction couleur BMP Empty
MessageSujet: Re: Fonction couleur BMP   Fonction couleur BMP EmptyJeu 20 Jan 2011 - 14:30

merci de ne PAS utiliser la balise username en dehors de oma, ou A LA LIMITE dans la signature...

_________________
Fonction couleur BMP Control-commentTous les icones de gm utilisables sur le cbna ICI  Fonction couleur BMP Main1-change-sprite
Revenir en haut Aller en bas
http://www.lecbna.org
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Fonction couleur BMP Empty
MessageSujet: Re: Fonction couleur BMP   Fonction couleur BMP EmptyJeu 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é.

_________________
Fonction couleur BMP Runningpotato1Fonction couleur BMP TvF6GED Fonction couleur BMP MdetltS
Revenir en haut Aller en bas
Topaze22
*Excellent utilisateur*
Topaze22


Messages : 6213
Localisation : Sur la Lune
Projet Actuel : Projet HELLO/TOPAZE22 Mario Bros World

Fonction couleur BMP Empty
MessageSujet: Re: Fonction couleur BMP   Fonction couleur BMP EmptySam 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.
Fonction couleur BMP Projet13
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

Fonction couleur BMP Empty
MessageSujet: Re: Fonction couleur BMP   Fonction couleur BMP EmptySam 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

_________________
Fonction couleur BMP Runningpotato1Fonction couleur BMP TvF6GED Fonction couleur BMP MdetltS
Revenir en haut Aller en bas
Contenu sponsorisé





Fonction couleur BMP Empty
MessageSujet: Re: Fonction couleur BMP   Fonction couleur BMP Empty

Revenir en haut Aller en bas
 
Fonction couleur BMP
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Sélecteur de couleur
» Couleur grafismes
» Sélectionner une couleur
» couleur pixel
» choix de couleur pendant le jeu

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