structure d'un bmp

Programmation d'applications complexes
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

structure d'un bmp

Message par cha0s »

pour la gestion des textures pour DM3D j'utilise des images que je crée et modifie en memoire pour plus de souplesse mais je suis perdue avec le bmp voicie mon code pour crée une image de 2x2 .
(je me suis insipré de ce site)
si quelqu'un avait une idée de mon ereur sa maiderait bien.

Code : Tout sélectionner

Procedure CreateTextureInMemory(c4, c3, c2, c)
  Protected  *adr,  *FileAdr  

  *adr = AllocateMemory(66)
  *FileAdr = *adr
  
  ;premier header
  PokeB(*adr, 66) ;B
  *adr+1
  PokeB(*adr, 77) ;M
  *adr+1
  PokeL(*adr, 66) ;taille de l'image
  *adr+4
  PokeB(*adr, 0) ;bfReserved1
  *adr+1
  PokeB(*adr, 0) ;bfReserved1
  *adr+1
  PokeB(*adr, 0) ;bfReserved2
  *adr+1
  PokeB(*adr, 0) ;bfReserved2
  *adr+1  
  PokeL(*adr, 54) ;Offset des bits du bitmap dans le fichier
  *adr+4
  
  ;second header
  PokeL(*adr, 40) ;Taille de cette structure en octets
  *adr+4
  PokeL(*adr, 2) ;Largeur du bitmap en pixel.
  *adr+4
  PokeL(*adr, 2) ;Hauteur du bitmap en pixel
  *adr+4
  PokeW(*adr, 1) ;1
  *adr+2
  PokeW(*adr, 24) ;bits
  *adr+2
  PokeL(*adr, 0) ;compression (le reste du header est facultatif si 0)
  *adr+4
  PokeL(*adr, 0) ;taille du fichier (pour compression)
  *adr+4
  PokeL(*adr, 0) ;Résolution horizontale en pixels par mètre
  *adr+4
  PokeL(*adr, 0) ;Résolution verticale en pixels par mètre.
  *adr+4
  PokeL(*adr, 0) ;Nombre de couleurs utilisées dans l’image.
  *adr+4
  PokeL(*adr, 0) ;Nombre de couleurs importantes.
  *adr+4
  
  
  *adr+1
  PokeB(*adr, Blue(c));bleu
  *adr+1
  PokeB(*adr, Green(c));vert
  *adr+1
  PokeB(*adr, Red(c));rouge
  *adr+1
  PokeB(*adr, Blue(c2));bleu
  *adr+1
  PokeB(*adr, Green(c2));vert
  *adr+1
  PokeB(*adr, Red(c2));rouge


  *adr+1
  PokeB(*adr, Blue(c3));bleu
  *adr+1
  PokeB(*adr, Green(c3));vert
  *adr+1
  PokeB(*adr, Red(c3));rouge
  *adr+1
  PokeB(*adr, Blue(c4));bleu
  *adr+1
  PokeB(*adr, Green(c4));vert
  *adr+1
  PokeB(*adr, Red(c4));rouge

  
  ProcedureReturn *FileAdr  
EndProcedure
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

n'oublie pas que

Chaque ligne de l'image doit comporter un nombre total d'octets qui soit un multiple de 4 sinon la ligne doit etre completée avec des zero
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

efectivement j'avais prit en compte ce parametre dans une version precedente, je peut exporter mes images en bitmap valide pour paint et autre mais DM3D n'en veut toujours pas je vais chercher autrement ...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ton entete est pourtant correcte ! :)
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

je pense aussi et le sdk de direct X est clair le bmp est un des format surporté par la comande que j'utilise.
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

T'as pas de soucis avec les bmp 'tout fait', ou exportés avec un prog de dessin ?
Force et sagesse...
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

premièrement, il faudrait éclaircir le code, c'est commenté, je suis d'accord mais on pourrait aussi passer par les structures (elles servent à ça)

Code : Tout sélectionner

Structure BITMAPFILEHEADER
  bfType.w
  bfSize.l
  bfReserved1.w
  bfReserved2.w
  bfOffBits.l
EndStructure

Structure BITMAPINFOHEADER
  biSize.l
  biWidth.l
  biHeight.l
  biPlanes.w
  biBitCount.w
  biCompression.l
  biSizeImage.l
  biXPelsPerMeter.l
  biYPelsPerMeter.l
  biClrUsed.l
  biClrImportant.l
EndStructure

Structure BITMAPINFO2
  bmiHeader.BITMAPINFOHEADER
  bmiColors.RGBQUAD[0]
EndStructure
Dri
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

tmyke a écrit :T'as pas de soucis avec les bmp 'tout fait', ou exportés avec un prog de dessin ?
non.
j'ai reperé une fonction "D3DXSaveTextureToFileInMemory" quand j'aurai le temp je ferait une petite analyse de la zone memoire qu'elle me retourne.
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

on dirait que les fonctions de directX ne m'aime pas :s

Code : Tout sélectionner

Global  *ppBuffer.ID3DXBUFFER
D3DXCreateBuffer(70, *ppBuffer)
sa compile sa se lance mais D3DXCreateBuffer renvoie une erreur
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Perso, j'ecrirait en fait:

Code : Tout sélectionner

Global  *ppBuffer.ID3DXBUFFER
D3DXCreateBuffer(70, @*ppBuffer)  
la doc dit bien :
Address of a pointer to an ID3DXBuffer interface,...
:wink:
Force et sagesse...
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

tmyke a écrit :Perso, j'ecrirait en fait:

Code : Tout sélectionner

Global  *ppBuffer.ID3DXBUFFER
D3DXCreateBuffer(70, @*ppBuffer)  
la doc dit bien :
Address of a pointer to an ID3DXBuffer interface,...
:wink:

*love*

D3DXCreateTextureFromFileInMemory ne marchait pas pour la meme raison. :p
Répondre