[JAVA] Construction d'un BMP par pixel

Construction d'un BMP par pixel [JAVA] - Java - Programmation

Marsh Posté le 19-09-2007 à 12:51:53    

Bonjour à tous,
 
Je souhaite construire un BMP en java depuis un tableau d'entier à 2 dimensions, contenant les couleurs "bleu"
de chaque pixel (pour des raisons d'utilité sur l'application).
J'ai étudié l'entête d'un fichier BMP et cherché sur internet des fonctions permettant de la construire , et de remplir le fichier par la suite:
 

Code :
  1. public static boolean writeBMP(String filename, int[][] color) {
  2. try{
  3. //écriture de l'entête du fichier
  4. outBMP.write(0x42); //Type
  5. outBMP.write(0x4D); //Type
  6. writeInt(outBMP,resx*resy*3+54); //Taille du fichier
  7. writeInt(outBMP,0); //Réservé
  8. writeInt(outBMP,54);
  9. writeInt(outBMP,40);
  10. writeInt(outBMP,resx); //Largeur
  11. writeInt(outBMP,resy); //Hauteur
  12. outBMP.write(0);
  13. outBMP.write(0);
  14. outBMP.write(24); //Nombre de bits par pixel
  15. outBMP.write(0);
  16. writeInt(outBMP,0);
  17. writeInt(outBMP,resx*resy*3);
  18. writeInt(outBMP,2851);
  19. writeInt(outBMP,2851);
  20. writeInt(outBMP,0);
  21. writeInt(outBMP,0);


 

Code :
  1. //Ecriture du corps dufichier BMP
  2. int sup = (resx * 3) % 4;
  3. for (int y = resy - 1; y >= 0; y--) {
  4. for (int x = 0; x < resx; x++) {
  5. //On écrit la couleur
  6. int bleu = color[x][y];
  7. //bleu = bleu & MASK;
  8. int rgb = (0<<24)+(10<<16)+(10<<8)+bleu;
  9. //writeColor(outBMP, img.getRGB(x, y));
  10. writeColor(outBMP, rgb);
  11. }
  12. //Bourrage
  13. for (int j = 0; j < sup; j++)
  14. outBMP.writeByte(0);
  15. }
  16. //Fermeture du fichier
  17. outBMP.close();


 
Ne manque-t-il pas quelque chose car lorsque j'essaie d'ouvrir le fichier créé, le fichier est d'un format inconnu?
Est-ce que l'entête BMP vous paraît bonne? (elle me paraît cohérente). Et le remplissage du BMP est-il correct?
 
Je vous remercie d'avance. :)

Reply

Marsh Posté le 19-09-2007 à 12:51:53   

Reply

Marsh Posté le 19-09-2007 à 17:48:28    

Attention, tu dois vérifier et faire attention aux sens des écritures (low high bit).
 
Du coup j'ai donc deux suggestions à te faire :
- Ton BMP n'a aucun plan, il en faut au moins 1 : juste avant de spécifier le nb de bit par pixel, tu écris deux octets à 0, je dirai que sur le deuxième (ou le premier voir la prochaine remarque) octet tu dois mettre 1.
 
- Et la viens la chose à vérifier dont je te parlais, en effet sur deux octets, penses tu que la lecture (par l'application qui va ouvrir le BMP) est en low ou high ? D'après ce que tu as écrit c'est plutot low, c'est à dire que pour dire 24 sur 2 octets tu as écrit : 24 puis 0. Mais ça peut être aussi 0 puis 24. Donc si je suis ton avis, pour le nombre de plan, tu devrais plutot écrire 1 puis 0 et non 0 puis 1. A vérifier... Moi je penche pour une lecture en deux octets, en high, ce qui veut dire du coup que toi tu dois écrire les 0 avant.
 
bref je m'embrouille tjrs un peu sur ces c*nneries, tu devrais tout simplement testé.

Reply

Marsh Posté le 19-09-2007 à 23:34:28    

vietcoder a écrit :

Attention, tu dois vérifier et faire attention aux sens des écritures (low high bit).

 

Du coup j'ai donc deux suggestions à te faire :
- Ton BMP n'a aucun plan, il en faut au moins 1 : juste avant de spécifier le nb de bit par pixel, tu écris deux octets à 0, je dirai que sur le deuxième (ou le premier voir la prochaine remarque) octet tu dois mettre 1.

 

- Et la viens la chose à vérifier dont je te parlais, en effet sur deux octets, penses tu que la lecture (par l'application qui va ouvrir le BMP) est en low ou high ? D'après ce que tu as écrit c'est plutot low, c'est à dire que pour dire 24 sur 2 octets tu as écrit : 24 puis 0. Mais ça peut être aussi 0 puis 24. Donc si je suis ton avis, pour le nombre de plan, tu devrais plutot écrire 1 puis 0 et non 0 puis 1. A vérifier... Moi je penche pour une lecture en deux octets, en high, ce qui veut dire du coup que toi tu dois écrire les 0 avant.

 

bref je m'embrouille tjrs un peu sur ces c*nneries, tu devrais tout simplement testé.


Merci beaucoup, c'est exactement ça. :)
Ca marche niquel. Merci encore. ;)


Message édité par biboo_ le 19-09-2007 à 23:34:43
Reply

Marsh Posté le 20-09-2007 à 10:13:56    

De rien,
 
c'est avec plaisir que je goute à la nostalgie des formats BMP, ça me rappelle mes premiers pas sous DOS... snif encore une larme :p

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed