Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Probleme de lecture de BMP [ Archives / Au secours ] (handmousemaster)

lundi 20 juin 2005 à 11:35:50 | Probleme de lecture de BMP

handmousemaster

Bonjour à tous, j'ai un probleme :

je souhaite lire des fichier BMP, je n'ai aucun probleme pour lire les entetes, mais dès que je veux lire les données de l'image, je n'ai plus rien. Voici mon code. Pouvez vous m'aider???




/******************************************/
/****** Définition (h) ********/
#include
<iostream>
#include <fstream>
using namespace std;

class BitMap
{
public:
   BitMap(){};
   ~BitMap(){};
   void LoadPic (char* fileName);
   void SavePic (char* fileName);

protected:
class cHeaderFile
{
public :
   char Type1;
   char Type2;
   unsigned long FicSize;
   
unsigned long Reserved;
   unsigned long DataOffset;
};
cHeaderFile HeaderFile;

/* Classe de l'entete de l'image */
class cHeaderPic
{
public:
   unsigned long HeaderPicSize;
   long PicWidth;  
   
long PicHeight;
   unsigned short Plan;
   unsigned short Depth;
   unsigned long Compression;
   unsigned long PicSize;
   unsigned long ResolHori;
   unsigned long ResolVerti;
   unsigned long NbColors;
   unsigned long NbColorsMain;
};   
cHeaderPic HeaderPic;
char* Data;
};
/**********************************************/
/*  Implementation (cpp)  */

#include "Lecture.h"

void
BitMap::LoadPic (char* fileName)
{
   ifstream File (fileName, ios::in | ios::binary);
   if (!File.is_open())
   {
   }
   else
   {
   /* Lecture de l'entete du fichier : 14 octets */
      File.read((char *)&HeaderFile.Type1, sizeof(char) ); // Type du fichier : 1 octet  
      
File.read((char *)&HeaderFile.Type2, sizeof(char) ); // Type du fichier : 1 octet
      File.read((char *)&HeaderFile.FicSize, sizeof(HeaderFile.FicSize) ); // Taille du fichier : 4 octets
      File.read((char *)&HeaderFile.Reserved, sizeof(HeaderFile.Reserved) ); // Champ réservé : 4 octets
      File.read((char *)&HeaderFile.DataOffset, sizeof(HeaderFile.DataOffset) ); //Décalage offset de l'image : 4 octets

      /* Lecture de l'entete de l'image : 40 octets */
      File.read((char *)&HeaderPic.HeaderPicSize, sizeof(HeaderPic.HeaderPicSize));
      File.read((
char *)&HeaderPic.PicWidth, sizeof(HeaderPic.PicWidth));
      File.read((
char *)&HeaderPic.PicHeight, sizeof(HeaderPic.PicHeight ));
      File.read((
char *)&HeaderPic.Plan, sizeof(HeaderPic.Plan ));
      File.read((
char *)&HeaderPic.Depth, sizeof(HeaderPic.Depth ));
      File.read((
char *)&HeaderPic.Compression, sizeof(HeaderPic.Compression ));
      File.read((
char *)&HeaderPic.PicSize, sizeof(HeaderPic.PicSize ));
      File.read((
char *)&HeaderPic.ResolHori, sizeof(HeaderPic.ResolHori ));
      File.read((
char *)&HeaderPic.ResolVerti, sizeof(HeaderPic.ResolVerti ));
      File.read((
char *)&HeaderPic.NbColors, sizeof(HeaderPic.NbColors ));
      File.read((
char *)&HeaderPic.NbColorsMain, sizeof(HeaderPic.NbColorsMain ));

      /* Lecture de l'image */
      Data = (char*)malloc( HeaderPic.PicSize );
      
File.read((char *)&Data, sizeof(Data));
   }
   File.close();
};

/************************/



lundi 20 juin 2005 à 13:44:12 | Re : Probleme de lecture de BMP

Cornell711

Salut,
Désolé, j'ai pas trop le temps de tester et je ne connais pas bien les bitmaps, mais je sais que j ai une fois traduit en delphi le code suivant http://www.cppfrance.com/code.aspx?id=21395
( c'est de la stéganographie donc il y a traitement du corps de l'image ) et je ne me rappelle pas qu'il ait été compliqué du tout, tout a fonctionné impec alors j'espère qu'en calquant dessus vous vous en sortirez !

@+

Cornell.

mardi 21 juin 2005 à 13:59:19 | Re : Probleme de lecture de BMP

CurieuxDeSavoir

Salut,

      Data = (char*)malloc( HeaderPic.PicSize );
      
File.read((char *)&Data, sizeof(Data));

sizeof(Data) = 4 
tu lis 4 octets seulement et non pas toutes les datas de ton image
Le sizeof que tu fais est sur le pointeur de Data, il faut mettre
HeaderPic.PicSize * sizeof(char) ou tout simplement HeaderPic.PicSize

mardi 21 juin 2005 à 20:22:17 | Re : Probleme de lecture de BMP

Arnaud16022

Membre Club
"HeaderPic.PicSize * sizeof(char) ou tout simplement HeaderPic.PicSize"
-> t'es sur que c'est équivalent?

_______________________
Omnia vincit labor improbus

mercredi 22 juin 2005 à 09:06:00 | Re : Probleme de lecture de BMP

CurieuxDeSavoir

typedef struct tagBITMAPINFOHEADER{ // bmih      DWORD  biSize;      LONG   biWidth;      LONG   biHeight;      WORD   biPlanes;      WORD   biBitCount      DWORD  biCompression;      DWORD  biSizeImage;      LONG   biXPelsPerMeter;      LONG   biYPelsPerMeter;      DWORD  biClrUsed;      DWORD  biClrImportant;  } BITMAPINFOHEADER;   
biSizeImage
Specifies the size, in bytes, of the image. This may be set to zero for BI_RGB bitmaps.




sizeof(char)=1 sous vc++ alors HeaderPic.PicSize * sizeof(char) != HeaderPic.PicSize ?
On m'aurait menti? ^^





Cette discussion est classé dans : file, char, sizeof, read, headerpic


Répondre à ce message

Sujets en rapport avec ce message

conversion [ par coyotedef ] salut!!lors de la compilation de mon code une erreur apparait. impossible de trouver un remede. "cannot convert parameter 1 from 'char [10]' to 'char' taille chaine de char [ par langedechu ] Salut , voila mon prob (je sais plus comment faire) :j'ai une variable : const char *buffer; et j aimerais savoir le nombre de caractere stocker dans Avis des PROS! [ par UnExPeCtEdSpy ] Bonjour,je suis plus familier du vb que du c++ alors j'vous d'mande de l'aide :J'utilise une Dll en c+ avec un prog en Vb qui manipule des fichiers.Qu PROBLEME POINTEURS [ par zeloveur ] char * saisirChaine(){ int i=0; char *chn; chn=(char *)malloc(sizeof(char)); do { chn[i]=getchar(); chn=(char *)realloc(chn,(++i+1)*sizeof(char)); } Problème d'effacement de tableau en C++ (sans MFC) [ par Shad0w ] Voilà, mon code copie le contenu d'un fichier dans une edit :------------- char fil[LEN]; OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(OPENFI debutant en c, probleme pour un programmme de compression [ par araborgne ] voila donc je cherchais un programme permettant de compresser et decompresser un fichier texte, et image.j'en ai trouver un, mais il est ecrit en c++, Erreurs de compilations bizarres avec Visual C++ 6 [ par VTS_35 ] Bonjour,G encore des problèmes de compilation avec mon programme. Je me suis rendu compte que le programme allait devenir balaise, alors j'ai décidé d Problème copie de fichier.... [ par Clonk ] Bonjour,Je voudrais copier un fichier texte dans mon appli, j'ai fais la fonction suivante://Copie d'un fichier (création du backup)int copier(char * f print allocation de memoir [ par sodival ] /* Je souhaiterai écrire le contenu texte d'une variable char dans un fichier, comment faire ?J'ai pri ce code, mais il me comble les espaces non ecri Probleme d'ecriture et copie fichier texte [ par metek ] SalutMon but est d'etudier un fichier txt de rechercher un mot,le localiser et enfin de copier le rest de la ligne(donc les mots qui le suivent sur la


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.