IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Comment transferer un bitmap PicBox --> CBitmap


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    20
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 20
    Par d�faut Comment transferer un bitmap PicBox --> CBitmap
    Comme je suis bleu en VC++, cette question est peut-�tre simple pour vous.
    En fait j'ai cr�er une routine C qui cr�e un bmp dans une fonction utlilisant CBitmap comme format. Lorsque je veux passer le bitmap a un pcibox je recois comme message : ne peux convertir Bitmap vers *CBitmap. Pouvez vous m'aider svp. Monter moi la voie (avec un ptit exemple).
    merci.

    De

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    CBitmap g_bmp; 
    g_bmp.CreateBitmap(360,200,1,32,NULL); 
    tools::WriteBmp::DrawBmp(g_bmp ,0,m_data);
    ?????

    vers

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    bool DrawBmp( System::Drawing::Bitmap *OrgBitmap, bool IsDown,  int data __gc[])

  2. #2
    mat.M
    Invit�(e)
    Par d�faut
    ne peux convertir Bitmap vers *CBitmap. Pouvez vous m'aider svp.
    Probl�me de typage :

    Il faut �crire
    tools::WriteBmp:rawBmp(&g_bmp ,0,m_data);
    ou sinon d�clarer :
    CBitmap *g_bmp;


    Sinon j'ai une fonction tir�e de Programming the MFC de Prosise

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    20
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 20
    Par d�faut
    H�las toujours le m�me r�sultat
    je pense que cella vient du type de d�laration de ma clace en declarant CBitmap *g_bmp;

    error C2664: 'tools::WriteBmp:rawBmp' : impossible de convertir le param�tre 1 de 'CBitmap *' en 'System:rawing::Bitmap __gc *'

    en utilisant tools::WriteBmp:rawBmp(&g_bmp ,0,m_data);

    error C2664: 'tools::WriteBmp:rawBmp' : impossible de convertir le param�tre 1 de 'CBitmap *__w64 ' en 'System:rawing::Bitmap __gc *'
    Pour �tre plus clear voici le code de la classe WriteBmp:

    toolsbimap.h:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #include <fstream>
     
    namespace drawtool
    {
    	class WriteBmp
    	{
    	public:
    		WriteBmp();
    		~WriteBmp();
    		bool DrawBmp(void *WorkBitmap, int width, int height, int stride, bool IsDown, int data __gc[]);
    	};
    }
     
    namespace tools
    {
    	public __gc class  WriteBmp
    	{
    		drawtool::WriteBmp	*pwriteBmp;
    	public:
    		WriteBmp(){ pwriteBmp = new drawtool::WriteBmp; }
    		~WriteBmp(){ delete pwriteBmp; }
     
    		bool DrawBmp( System::Drawing::Bitmap *OrgBitmap, bool IsDown,  int data __gc[])
    		{
    			bool bResult=false;
    			System::Drawing::Rectangle rect ;
    			rect.set_X(0);
    			rect.set_Y(0);
    			rect.set_Width(OrgBitmap->Width);
    			rect.set_Height(OrgBitmap->Height);
    			System::Drawing::Imaging::BitmapData *WorkBitmap = OrgBitmap->LockBits(rect, 
    				System::Drawing::Imaging::ImageLockMode::ReadWrite ,
    				System::Drawing::Imaging::PixelFormat::Format32bppArgb );
                bResult = pwriteBmp->DrawBmp(WorkBitmap->Scan0.ToPointer(), WorkBitmap->Width, WorkBitmap->Height, WorkBitmap->Stride, IsDown, data);
    			OrgBitmap->UnlockBits(WorkBitmap);
    			return bResult;
    		}
     
     
    	};

    toolsbitmap.ccp

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #include "stdafx.h"
    #include "toolsbmp.h"
     
    drawtool::WriteBmp::WriteBmp(void)
    {
    }
     
    drawtool::WriteBmp::~WriteBmp(void)
    {
    }
     
    bool drawtool::WriteBmp::DrawBmp(void *WorkBitmap, int width, int height, int stride, bool IsDown,int data __gc[])
    {
    	bool bResult = false;
    	int row, vAlpha;
    	BYTE *pixelToWrite;
    	if (BYTE *buffWorkBitmap = new BYTE[height*stride])
    	{
    		//Get bitmap from screen and Roll bitmap and put on buffer. 
    		if (IsDown == true)
    		{
    			row =height-1;
    			//for (int i=height-1 ;i>0 ;--i)
    			//	memcpy (buffWorkBitmap+i*stride, (BYTE *)WorkBitmap+(i-1)*stride, stride);
     
    				memcpy (buffWorkBitmap, (BYTE *)WorkBitmap+stride, stride*(height-1));
    		}
    		else
    		{
    			row=0;
    			//for (int i=0 ;i<height-2 ;++i)
    			//	memcpy (buffWorkBitmap+(i+1)*stride, (BYTE *)WorkBitmap+i*stride, stride);
    				memcpy (buffWorkBitmap+stride, (BYTE *)WorkBitmap, stride*(height-1));
    		}
     
    		//Create the picture 
    		for(int col = 0; col <  width -1 ; ++col)
    		{
    			vAlpha = data[col]  ;
    			pixelToWrite=(BYTE *)buffWorkBitmap + (row * stride) + (col*4);
    			pixelToWrite[3] = vAlpha;
    			pixelToWrite[2] = 255; //rood
    			pixelToWrite[1] = 255; //Green
    			pixelToWrite[0] = 0;  //Bleue
    		}
     
    		// Put on screen
    		memcpy (WorkBitmap,buffWorkBitmap, height*stride);
    		delete[] buffWorkBitmap;
    	}
     
    	return bResult; 
     
    }

  4. #4
    mat.M
    Invit�(e)
    Par d�faut
    Afin de diagnostiquer le probl�me :
    * quel type de projet ? mode win32 console , appli MFC avec AppWizard , mode win32 fenetre ????
    * quelle version de VC ??
    Je vois la directive __gc : apparemment c'est du managed code ou code manag� . Le projet utilise t-il les extensions .NET ??

    La classe CBitmap est une classe des collections MFC , elle n'est par cons�quent exclusivement utilisable que dans un projet d'appli graphique reposant sur les MFC ( cr�e avec AppWizard ou non car on peut cr�er un projet MFC sans AppWizard )

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    20
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 20
    Par d�faut
    Citation Envoy� par addicted_to_MFC
    Afin de diagnostiquer le probl�me :
    * quel type de projet ? mode win32 console , appli MFC avec AppWizard , mode win32 fenetre ????
    appli MFC avec AppWizard
    Citation Envoy� par addicted_to_MFC
    * quelle version de VC ??
    VC7 --> .net
    Citation Envoy� par addicted_to_MFC
    Je vois la directive __gc : apparemment c'est du managed code ou code manag� . Le projet utilise t-il les extensions .NET ??
    oui

    en fait je cherche a obtenir de la performance pour afficher 2 bmp de 360/400 cr�er ligne par ligne et en temps r�el.
    J'ai tent� de le faire en C#.net et VB.net, mais je me heurte a une lenteur de refresh qui me fait un affichage de +/- 12 ligne � la seconde.

  6. #6
    mat.M
    Invit�(e)
    Par d�faut
    Ce n'est pas assez explicite : le code source pour afficher une bitmap provient-il d'une librairie externe ??
    Sinon pour utiliser des graphiques avec .NET , il faut avoir recours � GDI+ qui est tr�s lent et ce qui semble �tre le cas ici.
    Il vaut mieux avec une appli MFC utiliser le GDI classique.


    Sur codeguru.com ou codeproject.com il ya des sources pour afficher une bitmap

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    20
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 20
    Par d�faut
    Je t'explique plus profond�ment ma difficult�:

    Je doit afficher dans une fen�tre trois bitmaps ( 2 de 360/400 et 50/400) 2 images plus une �chelle de d�placement.

    Dans les 2 grands bitmaps je cr�er une image � partir de donn�e venant d'une sonde ultrasonique tournant sur un axe de 360� (d'ou 360/400) tout en se d�pla�ant, sonde utilis�e par ex pour la v�rification d'une canalisation souterraine. En m�me temps d�autre donn�e sont affich�e mais ne repr�sente que peu de temps de process. Actuellement toutes les donn�es sont lues dans un fichier et doivent �tre affich�es dans une vitesse variable suivant le besoin de la visualisation.
    Pour faire bref, une ligne d�image de 360 pixels est g�n�r�e tous les x p�riodes (pour les test je remplis un tableau de 360 donn�es alpha)
    Apr�s m'�tre heurt� a la lenteur du GDI+ j'essaye de transposer mon appli en VC++ 7 sur .net. J'ai donc cr�er une application MFC bas�e sur une boute de dialogue. J'essaye d'utiliser la classe C++ que j'ai cr�e pour VB et C#( a tour probablement). Le but est d'afficher dans trois ou 1 picture box l'image g�n�r�e. Dans la class du dialogue CWinTestDlg j'essaye de passer le bmp cr�er vers le pictbox en faisant appel a ma classe tools::WriteBmp.
    Voici le code d'appel, je soup�onne qu'il utilise tjrs le GDI+, si oui comment utiliser le GDI standard ou est il possible de cr�er un ocx qui afficherais une image en affichage rapide.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    #include "stdafx.h"
    #include "main.h"
    CBitmap *g_travel_bmp; 
    int m_data[360] ;
     
    CWinTestDlg::CWinTestDlg(CWnd* pParent /*=NULL*/)
    	: CDialog(CWinloggerDlg::IDD, pParent)
    {
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
     
    void CWinTestDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	// AFX_DATA_MAP
    	DDX_Control(pDX, IDC_LVB_DEPTH, m_txt_LabelTest);
    	// AFX_DATA_MAP
     
    }
     
    BEGIN_MESSAGE_MAP(CWinloggerDlg, CDialog)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
     
    BOOL CWinTestDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
     
    	SetIcon(m_hIcon, TRUE);			// 	SetIcon(m_hIcon, FALSE);		// Définir une 
    	// TODO : ajoutez ici une initialisation supplémentaire
    	for(int i=0;i<360;i++)
    	{
    		if(i<256)
    		{
    			m_data[i]=i;
    		}else{
    		    m_data[i]=i-256;
    		}
     
    	}
     
    	g_travel_bmp.CreateBitmap(360,200,1,32,NULL); 
    // Comment faire ici ?
    	tools::WriteBmp::DrawBmp(g_travel_bmp ,0,m_data);  
    //
    	return TRUE; 
    }

  8. #8
    mat.M
    Invit�(e)
    Par d�faut
    Soit c'est GDI+ ou l'API win 32 , soit l'un soit l'autre !!!


    Te casse pas la t�te : voici une m�thode pour afficher des bmp inspir�e de Programming the MFC de Prosise :

    D�clarer deux m�thodes membres de CWinTestDlg et dans le fichier .h d�clarer une classe membre CBitmap m_bitmap

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    BOOL CWinTestDlg::ChargerBitmap(LPCTSTR lpszPathName)
    {
    	DIBSECTION ds;
    	if ((HBITMAP) m_bitmap != NULL)
    	ReleaseBitmap();
    	HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL,lpszPathName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
     
        if (hBitmap == NULL) {
     
            return FALSE;
    	}
     
        m_bitmap.Attach (hBitmap);
        m_bitmap.GetObject (sizeof (DIBSECTION), &ds);
    	m_Height= ds.dsBm.bmHeight;
    	m_Width =ds.dsBm.bmWidth; 
    	//
        // Return now if this device doesn't support palettes.
    	//
        CClientDC dc (NULL);
        if ((dc.GetDeviceCaps (RASTERCAPS) & RC_PALETTE) == 0)
    	{
    		bLoaded=TRUE;
    		return TRUE;
    	}
    	//
        // Create a palette to go with the DIB section.
    	//
        if ((HBITMAP) m_bitmap != NULL) {
     
            int nColors;
            if (ds.dsBmih.biClrUsed != 0)
                nColors = ds.dsBmih.biClrUsed;
            else
                nColors = 1 << ds.dsBmih.biBitCount;
     
    		//
            // Create a halftone palette if the DIB section contains more
            // than 256 colors.
    		//
            if (nColors > 256)
                m_palette.CreateHalftonePalette (&dc);
     
    		//
            // Create a custom palette from the DIB section's color table
            // if the number of colors is 256 or less.
    		//
            else {
                RGBQUAD* pRGB = new RGBQUAD[nColors];
     
    //            CDC memDC;
                memDC.CreateCompatibleDC (&dc);
                CBitmap* pOldBitmap = memDC.SelectObject (&m_bitmap);
                ::GetDIBColorTable ((HDC) memDC, 0, nColors, pRGB);
                memDC.SelectObject (pOldBitmap);
     
                UINT nSize = sizeof (LOGPALETTE) +
                    (sizeof (PALETTEENTRY) * (nColors - 1));
                LOGPALETTE* pLP = (LOGPALETTE*) new BYTE[nSize];
     
                pLP->palVersion = 0x300;
                pLP->palNumEntries = nColors;
     
                for (int i=0; i<nColors; i++) {
                    pLP->palPalEntry[i].peRed = pRGB[i].rgbRed;
                    pLP->palPalEntry[i].peGreen = pRGB[i].rgbGreen;
                    pLP->palPalEntry[i].peBlue = pRGB[i].rgbBlue;
                    pLP->palPalEntry[i].peFlags = 0;
                }
     
                m_palette.CreatePalette (pLP);
                delete[] pLP;
                delete[] pRGB;
            }
        }
    return TRUE;
    }
     
     
    Pour l'afficher 
    void CWinTestDlg::Draw(CDC *pDC, int x, int y)
    {
     
    //	if(m_bLoaded==FALSE)return; utiliser un booleen le 
    /// cas echeant pour savoir si elle a ete chargee ou non
        if ((HBITMAP)m_bitmap != NULL) {
            CPalette* pOldPalette;
            CPalette* pPalette = &m_palette;
     
            if (pPalette != NULL) {
                pOldPalette = pDC->SelectPalette (pPalette, FALSE);
                pDC->RealizePalette ();
            }
     
            CDC memDC;
            memDC.CreateCompatibleDC (pDC);
            CBitmap* pOldBitmap = memDC.SelectObject (&m_bitmap);
            pDC->BitBlt (x, y, m_Width ,m_Height , &memDC,0, 0, SRCCOPY);
     
    		memDC.SelectObject (pOldBitmap);
            if (pPalette != NULL)
                pDC->SelectPalette (pOldPalette, FALSE);
        }
     
     
    }
     
     
    Puis SURTOUT à la fin 
     
     
    void CWinTestDlg::ReleaseBitmap()
    {
     
     
    	if ((HBITMAP) m_bitmap != NULL)
            m_bitmap.DeleteObject ();
     
        if ((HPALETTE) m_palette != NULL)
            m_palette.DeleteObject ();
     
     
    }
    Donc dans OnInitDialog() faire:
    ChargerImage("image.bmp");

    Et utiliser le message WM_PAINT pour l'afficher ( utiliser un CPaintDC �ventuellement )

    Il faut aller dans le MSDN regarder les fonctionnalit�s du GDI win32.
    Donc tout r�adapter � Visual C++!

  9. #9
    mat.M
    Invit�(e)
    Par d�faut
    Sinon utiliser CDC::SetPixel() mais c'est long.
    Ou bien StretchDIBits():
    rect est de classe CRect ,buffer est de type unsigned char * (donc un buffer de donn�es) et hdc de type HDC

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    BITMAPINFOHEADER bmiHeader;
    		bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    		bmiHeader.biWidth = m_width;
    		bmiHeader.biHeight = m_height;
    		bmiHeader.biPlanes = 1;
    		bmiHeader.biBitCount = 24;
    		bmiHeader.biCompression = BI_RGB;
    		bmiHeader.biSizeImage = 0;
    		bmiHeader.biXPelsPerMeter = 0;
    		bmiHeader.biYPelsPerMeter = 0;
    		bmiHeader.biClrUsed = 0;
    		bmiHeader.biClrImportant = 0;
     
    StretchDIBits(hdc,rect.left ,rect.top ,rect.Width() ,rect.Height()  ,0,0,miHeader.biWidth,bmiHeader.biHeight,buffer,	(LPBITMAPINFO)&bmiHeader,DIB_RGB_COLORS,	SRCCOPY);

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    20
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 20
    Par d�faut
    "Donc dans OnInitDialog() faire: ChargerImage("image.bmp"); "
    Je peux pas il n'existe pas puisque je le cr�e...

    Merci pour ton aide je vais gratter dans ce sens et je te tiens au courant me mon progres.

    A+
    Albert

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    20
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 20
    Par d�faut
    J'ai r�alis� la classe dont j'avais besoin et elle tourne bien, mais j'ai encore un petit soucis.
    Comme je veux partir d'une image vierge, j'utise
    HBITMAP hBitmap = (HBITMAP)::CreateBitmap(360,400,32,4,NULL); mais a l'appel de ma classe ca se plante . ?
    En fait j'ai besoin d'une image de 360/400 en 32c et 3bytes/pixel
    Quel est le probl�me ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    CDC *pDC = m_piclevel.GetDC();
     
    //le bitmap issus du fichier ne provoque pas de plantage
    //HBITMAP hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
    //	"e:\\test\\image1.bmp", IMAGE_BITMAP, 0, 0, 
    //               LOADFROMFILE |LR_CREATEDIBSECTION );
     
    //le bitmap ici plante même si je teste le format
     
    HBITMAP hBitmap = (HBITMAP)::CreateBitmap(360,400,32,3,NULL);
    //l'appel de la classe
    bool m_test = m_pCTools->SetLineOfPixel(hBitmap,pDC,m_data); 
     
    //la classe 
    bool CToolsBmp::SetLineOfPixel(HBITMAP hSource,CDC *pDC,int data[])
    {
    	CDC memdcX;
    	DWORD dwValue;
    	memdcX.CreateCompatibleDC(pDC);//map these CDC objects to your window DC
    	BITMAP bmpX;
    	CBitmap mybmp;
    	//mybmp.LoadBitmap(IDB_BITMAP2) if in resource
    	mybmp.Attach(hSource);
    	//Get bitmap dimensions into BITMAP structure : bmType bmWidth bmWidthBytes
    	//Total of bytes by pixels",bmpX.bmWidthBytes/bmpX.bmWidth)
    	mybmp.GetBitmap(&bmpX);
    	//allocate memory for image byte buffer
    	BYTE* bmpBuffer=(BYTE*)GlobalAlloc(GPTR,bmpX.bmWidthBytes * bmpX.bmHeight);
    	//Get the bitmap bits int a structure
    	dwValue=mybmp.GetBitmapBits(bmpX.bmWidthBytes*bmpX.bmHeight,bmpBuffer);
    	for(int row=0;row<bmpX.bmHeight-1;row++)
    	{
    		for(int col=0;col<bmpX.bmWidth;col++)
    		{
    			int ptopixel=row * bmpX.bmWidthBytes + col*3;
    			bmpBuffer[ptopixel]=(BYTE)data[col]; // Bleue
    			bmpBuffer[ptopixel+1]=0; // Green
    			bmpBuffer[ptopixel+2]=0; // Rood
    		}
    	}
    	//generate image from buffer
    	dwValue = mybmp.SetBitmapBits(bmpX.bmWidthBytes*bmpX.bmHeight,bmpBuffer);
    	mybmp.GetBitmap(&bmpX);
    	memdcX.SelectObject(mybmp);//select mybmp
    	//Draw the bitmap image
    	pDC->BitBlt(0,0,bmpX.bmWidthBytes,bmpX.bmHeight ,&memdcX,0,0,SRCCOPY);
    	GlobalFree((HGLOBAL)bmpBuffer);//Free memory
    	//TRACE("CToolsBmp::SetLineOfPixel pass"); 
    	return true;
    }

  12. #12
    Membre confirm�
    Inscrit en
    Novembre 2002
    Messages
    35
    D�tails du profil
    Informations personnelles :
    �ge : 51

    Informations forums :
    Inscription : Novembre 2002
    Messages : 35
    Par d�faut
    C normal dans l'implementation actuel du GDI
    nPlane * cBitsPerPixel > 32 la creation echou

    pour un hBmp24bpp utilise 8 et 3 respectivement.

    Ou si tu ne sais pas quoi utiliser, Utilise CreateCompatibleBitmap qui se basera sur le hDC.

    Voila @+

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    20
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 20
    Par d�faut
    J'ai finalement utilis�
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    HBITMAP hBitmap = (HBITMAP)::CreateBitmap(360,400,1,32,NULL);
    Ca marche bien et le mode est id�al pour mon projet, reste a voir c�t� client . Pour l'instant j'utilise un bouton pour cr�er l'image, il faut donc que je traite OnPaint pour r�afficher l'�cran.
    J'ai tester
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    hBitmap = (HBITMAP)::CreateCompatibleBitmap(hDC,360,400);
    mais j'obtiens tjrs un bmp n/bl.
    Au fait je me prend un peu les pinceaux avec les pointeurs : Est il possible de modifier les variables d'une classe appelante et comment garder une variable globale pour toutes les classes ?
    merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [.NET Remoting] Comment transferer un Dataset ?
    Par B.AF dans le forum Framework .NET
    R�ponses: 2
    Dernier message: 30/12/2005, 22h34
  2. Comment supprimer une bitmap
    Par maxattack dans le forum MFC
    R�ponses: 2
    Dernier message: 04/10/2005, 15h37
  3. Comment afficher un Bitmap contenant une couche alpha ?
    Par pwozniak dans le forum Composants VCL
    R�ponses: 9
    Dernier message: 17/01/2005, 19h55
  4. Comment cr�er un bitmap � partir d'un panel ?
    Par calou34 dans le forum Composants VCL
    R�ponses: 3
    Dernier message: 19/08/2003, 15h06
  5. Comment copier un bitmap d'une image � une autre?
    Par gord's dans le forum Langage
    R�ponses: 2
    Dernier message: 19/08/2003, 13h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo