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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tools::WriteBmp __gc   :?:
    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