Inhalt von CStatic als Bitmap abspeichern



  • Ich habe eine Cstatic Klasse abgleitet und zeichne ein Bild hinein über

    void CGraphCtrl::OnPaint() 
    {
    	CPaintDC dc(this); // device context for painting	
    
    	CRect rc;
    	GetClientRect(rc);
    
    	CMemDC pDC(&dc, &rc);
    ...
    	pDC->FillSolidRect(x,y,x+1,y+1,c);
    ...
    }
    

    Diesen Inhalt von pDC würde ich auch gerne als Bitmap abspeichern können.

    Wie müsste ich das machen ?

    Matthias


  • Mod



  • Ich habe folgenden Code den ich implementieren möchte (wurde mir so empfohlen)

    void CGraphCtrl::OnPaint() 
    {
    	CPaintDC dc(this); // device context for painting	
    
    	CRect (rc);
    	GetClientRect(rc);
    
    	//CMemDC pDC(&dc,&rc); // Double Buffering
    
    	CDC MemDC;
    	MemDC.CreateCompatibleDC(&dc);
    	Bmp.CreateCompatibleBitmap(&dc, rc.Width(), rc.Height());
    	CBitmap *pOldBitmap = MemDC.SelectObject(&Bmp);
    
    	COLORREF c;
    	if  ((m_PixelNumberX>0) && (m_PixelNumberY > 0))
    	{
    		for (int ix=0; ix < m_PixelNumberX; ix++)
    		{
    			for (int iy=0; iy < m_PixelNumberY; iy++)
    			{
    				c=PlotData[ix][iy];
    				//pDC->SetPixel(ix,iy,c);
    				MemDC.SetPixel(ix,iy,c);
    			}
    		}
    	}
    
    	dc.BitBlt(0,0,rc.Width(),rc.Height(),&MemDC,0,0,SRCCOPY);
    	MemDC.SelectObject(pOldBitmap);
    
    }
    

    Ich sollte damit, wenn ich es richtig verstanden habe, mit folgendem Code auch ein Bitmap speichern können:

    CImage Image;
    Image.Attach(Bmp.Detach());
    Image.Save(...);
    

    das Problem ist nur, das obige Funktion and der Stelle

    CBitmap *pOldBitmap = MemDC.SelectObject(&Bmp);
    

    innerhalb von

    BOOL CGdiObject::Attach(HGDIOBJ hObject)
    {
    	ASSERT(m_hObject == NULL);      // only attach once, detach on
    

    abbricht und mir der Grund nicht klar ist.

    Matthias


Anmelden zum Antworten