Lire Bmp

Signaler
Messages postés
5
Date d'inscription
mercredi 18 avril 2007
Statut
Membre
Dernière intervention
11 avril 2008
-
Messages postés
5
Date d'inscription
mercredi 18 avril 2007
Statut
Membre
Dernière intervention
11 avril 2008
-
Bonjour,
dans le but de developper une application durant mon stage, j'ai besoin d'accédé au pixel d'une image bmp, pour la lire et l'afficher, et j'ai besoin de votre aide, 

voila ce qui j'ai déja fait:
 
class CImage : public CFrameWnd
{
protected:
 CImage();           // protected constructor used by dynamic creation
public:




public:
 int Hauteur;
 int Largeur;
 CImage *pdata;
 BITMAPFILEHEADER Tete;
 BITMAPINFO Info;
 struct rgb {BYTE r;BYTE g;BYTE b;};
 rgb *PImage;
  CImage(CString InitFileName);

protected:
 virtual ~CImage();

 afx_msg void OnPaint();
 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
}; 

Image.cpp

#include "stdafx.h"
#include "lecture.h"
#include "Image.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


/////////////////////////////////////////////////////////////////////////////
// CImage


IMPLEMENT_DYNCREATE(CImage, CFrameWnd)


CImage::CImage()
{
}
CImage::CImage(CString InitFileName)  // 2eme constructeur
{
 
 CFile Fichier;
 if (Fichier.Open(InitFileName, CFile::modeRead))
 {
  Fichier.Read(&Info,sizeof(BITMAPFILEHEADER));
  if (Tete.bfType==19778)
  {
   Fichier.Read(&Info,sizeof(BITMAPINFOHEADER));
   Largeur=Info.bmiHeader.biWidth;
   Hauteur=Info.bmiHeader.biHeight;
   // allocation memoire du plan image
   PImage=(rgb*)malloc(Largeur*Hauteur*sizeof(rgb));
   Fichier.Read(PImage,Largeur*Hauteur*sizeof(rgb));
  }
  Fichier.Close();
 }
}


CImage::~CImage()
{
}




BEGIN_MESSAGE_MAP(CImage, CFrameWnd)
 //{{AFX_MSG_MAP(CImage)
 ON_WM_PAINT()
 ON_WM_CREATE()
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CImage message handlers



void CImage::OnPaint()
{
 CPaintDC dc(this); // device context for painting
 


  /****************** code ajouté***************/
  
  SetDIBitsToDevice(dc.GetSafeHdc(),0,0,Largeur,Hauteur,0,0,0,Hauteur,PImage,&Info,DIB_RGB_COLORS);
  ReleaseDC(&dc); //le dc est relaché
  /****************** code ajouté***************/
}

et puis j'ai éssayé de surcharger la fonction create pour éviter d'appeler une fonction create trop chargé à chaque nouvelle creation de fenetre de la maniere suivante

void CImage::Create(LPCSTR szTitle, CMDIFrameWnd *parent)
{
 CRect rect(0,0,640,480);
 long style=WS_CHILD|WS_VISIBLE|WS_OVERLAPPEDWINDOW;CMDIChildWnd::Create(AfxRegisterWndClass(CS_DBLCLKS|CS_HREDRAW|CS_VREDRAW|CS_BYTEALIGNWINDOW|CS_SAVEBITS, NULL,(HBRUSH)(COLOR_WINDOW+1),NULL),szTitle,style,rect,parent);
}


et j'ai eu l'erreur suivant 
error C2352: 'CMDIChildWnd::Create' : illegal call of non-static member function
        c:\program files\microsoft visual studio\vc98\mfc\include\afxwin.h(3402) : see declaration of 'Create'

je voudrais savoir premierement es ce que je suis sur le bon chemain, si c'est oui comment corriger mon erreur, sinon donner moi une autre idée.
et merci d'avance.

Elise

2 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
La méthode Create que tu as crée est-elle statique?

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
5
Date d'inscription
mercredi 18 avril 2007
Statut
Membre
Dernière intervention
11 avril 2008

en faite j'ai commu une erreur, c'est bien CFrameWnd et pas CMDIChildWnd, est ça s'est compilé sans erreur ensuite j'ai ajouté les deux lignes suivants pour l'affichage mais ça n'a pas marché

void CLectureDlg::OnButton1()
{
 // Fonction associée au bouton dans la boite de dialogue
 
 CImage *pdidi= new CImage("mimi.bmp");
 pdidi->Create("Titre",this);
 
}

et il m'a met cette erreur   error C2664: 'void __thiscall CImage::Create(const char *,class CMDIFrameWnd *)' : cannot convert parameter 2 from 'class CLectureDlg *const ' to 'class CMDIFrameWnd *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

j'espere que vous pouvez m'aider et merci d'avance.