Soucis d'écriture d'un fichier BITMAP [RESOLU]

Soucis d'écriture d'un fichier BITMAP [RESOLU] - Java - Programmation

Marsh Posté le 05-06-2004 à 23:35:31    

Alors voila, tout semble fonctionner, le fichier est lisible, ca ressemble à ce que je veux, sauf que toutes les valeurs entre 123 et 160 partent en sucette ...
j'ai un FileWriter f et je fais f.write(ma valeur)
Et qd cette valeur est entre 123 et 160, dans le fichier ca me met systématiquement 63 :heink:
 
Bref je capte pas tout ... si vous pouvez m'éclairer :)


Message édité par LeMakisar le 06-06-2004 à 09:39:54
Reply

Marsh Posté le 05-06-2004 à 23:35:31   

Reply

Marsh Posté le 06-06-2004 à 00:43:34    

code?

Reply

Marsh Posté le 06-06-2004 à 08:57:24    


 

Code :
  1. FileWriter f=new FileWriter(chemin);
  2. int taille=largeur*hauteur;
  3. byte[] b;
  4. f.write("BM" );
  5. b=intToDWord(taille*3+54);
  6. for(int j=0;j<4;j++) {
  7.         f.write(b[j]);
  8. }
  9. b=intToDWord(0);
  10. for(int j=0;j<4;j++) {
  11.         f.write(b[j]);
  12. }
  13. b=intToDWord(54);
  14. for(int j=0;j<4;j++) {
  15.         f.write(b[j]);
  16. }
  17. b=intToDWord(40);
  18. for(int j=0;j<4;j++) {
  19. f.write(b[j]);
  20. }
  21. b=intToDWord(largeur);
  22. for(int j=0;j<4;j++) {
  23. f.write(b[j]);
  24. }
  25. b=intToDWord(hauteur);
  26. for(int j=0;j<4;j++) {
  27. f.write(b[j]);
  28. }
  29. b=intToWord(1);
  30. for(int j=0;j<2;j++) {
  31. f.write(b[j]);
  32. }
  33. b=intToWord(24);
  34. for(int j=0;j<2;j++) {
  35. f.write(b[j]);
  36. }
  37. b=intToDWord(0);
  38. for(int j=0;j<4;j++) {
  39. f.write(b[j]);
  40. }
  41. b=intToDWord(0);
  42. for(int j=0;j<4;j++) {
  43. f.write(b[j]);
  44. }
  45. b=intToDWord(10000);
  46. for(int j=0;j<4;j++) {
  47. f.write(b[j]);
  48. }
  49. b=intToDWord(10000);
  50. for(int j=0;j<4;j++) {
  51. f.write(b[j]);
  52. }
  53. b=intToDWord(0);
  54. for(int j=0;j<4;j++) {
  55. f.write(b[j]);
  56. }
  57. b=intToDWord(0);
  58. for(int j=0;j<4;j++) {
  59. f.write(b[j]);
  60. }
  61. Color c;
  62. float zoom=inter.AccesZoneImage().AccesZoom();
  63. for(int k=hauteur-1;k>=0;k--) {
  64.         for(int j=0;j<largeur;j++) {
  65.         c=texture_actuelle.couleur(j/zoom,k/zoom);
  66.          f.write(c.getBlue());
  67.          f.write(c.getGreen());
  68.          f.write(c.getRed());
  69.         }
  70. }
  71. f.close();


 
Voila bon c'est pas très beau mais le but du jeu était que ca devait être fonctionnel rapidement :D
La méthode couleur(x,y) ca calcule la couleur d'un pixel (ce sont des textures procédurales), et mes getRed, getGreen et getBlue renvoient la bonne valeur, j'ai vérifié.
Le fichier bitmap se crée bien mais c'est au niveau des couleurs que ca fait un peu des trucs bizarres.
 
Je me disais que ca pouvais être une histoire d'entier signé/non signé mais je vois pas ...
 
j'oubliais, les méthodes inttoDWord et inttoWord renvoient un tableau de 4 bytes et un tableau de 2 bytes, mais bon je suppose que j'avais pas besoin de le dire :)


Message édité par LeMakisar le 06-06-2004 à 09:02:35
Reply

Marsh Posté le 06-06-2004 à 09:16:02    

au fait, j'ai testé un f.write(123) usque f.write(159) ben ca m'écrit 63 dans le fichier, donc ca viendrait de al valeur qu'on donne au write()
 
Bon je tente d'utiliser un FileOutputStream à la place d'un FileWriter c'est plus adapté.
je vous tiens au courant


Message édité par LeMakisar le 06-06-2004 à 09:32:52
Reply

Marsh Posté le 06-06-2004 à 09:38:57    

Voila j'ai rien dit, problem solved :D
 
pour ceux que ca intéresse :

Code :
  1. FileOutputStream f=new FileOutputStream(chemin);
  2.     int taille=largeur*hauteur;
  3.     f.write('B');     //type de fichiers : Bitmap donc BM
  4.     f.write('M');
  5.     f.write(intToDWord(taille*3+54));  //taille du fichier en octets
  6.     f.write(intToDWord(0));   //reservé, doit être mis à 0
  7.     f.write(intToDWord(54));   //offset (début de l'image)
  8.     f.write(intToDWord(40));    //taille de l'entête de l'image (40 donc 28 en hexa)
  9.     f.write(intToDWord(largeur));   //largeur de l'image en pixels
  10.     f.write(intToDWord(hauteur));  //hauteur de l'image en pixels
  11.     f.write(intToWord(1));    //nombre de plans sur 2 octets
  12.     f.write(intToWord(24));   //profondeur de codage de la couleur sur 2 octets
  13.     f.write(intToDWord(0));   //méthode de compression (0 : non compressée) sur 4 octets
  14.     f.write(intToDWord(0));   //taille totale de l'image en octets (sur 4 octets)
  15.     f.write(intToDWord(10000));  //résolution en pixels/m horizontale sur 4 octets
  16.     f.write(intToDWord(10000));  //résolution en pixels/m verticale sur 4 octets
  17.     f.write(intToDWord(0));   //nombre de pixels de la palette sur 4 octets
  18.     f.write(intToDWord(0));   //nombre de pixels importants de la palette sur 4 octets (0 pour tous)
  19.     Color c;
  20.     float zoom=inter.AccesZoneImage().AccesZoom();
  21.     for(int k=hauteur-1;k>=0;k--) {  //affichage de l'image, à l'envers puisque c'est du bitmap
  22.      for(int j=0;j<largeur;j++) {
  23.       c=texture_actuelle.couleur(j/zoom,k/zoom);
  24.       f.write((byte) c.getBlue());
  25.       f.write((byte) c.getGreen());
  26.       f.write((byte) c.getRed());
  27.      }
  28.     }
  29.     f.close();


Message édité par LeMakisar le 06-06-2004 à 09:39:15
Reply

Marsh Posté le 07-06-2004 à 21:31:13    

ca ressemble a quoi a la fin [:dawa]

Reply

Marsh Posté le 07-06-2004 à 21:37:28    

veryfree a écrit :

ca ressemble a quoi a la fin [:dawa]


 
petit curieux oportuniste  ;)

Reply

Marsh Posté le 07-06-2004 à 21:43:45    

Farook stai le prenom de freddie mercury ca, jme trompe?
 
 
edit : \o/


Message édité par veryfree le 07-06-2004 à 21:44:12
Reply

Marsh Posté le 07-06-2004 à 22:07:39    

ca ressemble à une texture procédurale enregistrée au format bitmap :)

Reply

Marsh Posté le 07-06-2004 à 23:45:47    

veryfree a écrit :

Farook stai le prenom de freddie mercury ca, jme trompe?
 
 
edit : \o/


 
Exact : un connaisseur. Je vois très bien j'apprécie.
Remarque, c'est aussi le prénom d'un de mes prof.

Reply

Marsh Posté le 07-06-2004 à 23:45:47   

Reply

Marsh Posté le 07-06-2004 à 23:56:38    

ca a bercé mon adolescence tout ca :'(

Reply

Marsh Posté le 08-06-2004 à 09:49:12    

veryfree a écrit :

ca a bercé mon adolescence tout ca :'(


 
Moi aussi.
C'était un super groupe. Il reste toujours le groupe culte pour moi.
Du coup, je garde ce prénom à la mémoire de Freddy et du groupe de manière plus générale.  :)

Reply

Sujets relatifs:

Leave a Replay

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