Announcement

Collapse
No announcement yet.

DC in Bitmap zeichnen und speichern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DC in Bitmap zeichnen und speichern

    Ich habe folgenden Code, welcher einen Fehler enthält:

    Code:
    void CEMFBetrachter_MFCView::OnFileSaveAsBMP()
    {
    	CBitmap b;
    	CDC c;
    	c.CreateCompatibleDC(NULL);
    	CRect clientrect;
    	ENHMETAHEADER HEADER=(((CMainFrame *)AfxGetMainWnd())->MFileHeader);
    clientrect.top=HEADER.rclBounds.top; clientrect.bottom=HEADER.rclBounds.bottom;
    clientrect.right=HEADER.rclBounds.right; clientrect.left=HEADER.rclBounds.left;
    	HENHMETAFILE H=(((CMainFrame *)AfxGetMainWnd())->hMFile);
    	c.SelectObject(&b);
    c.PlayMetaFile(H,&clientrect);
    
    CImage image;
    
            image.Attach(b);
    
            image.Save(_T("C:\\mfcEMFtest.bmp"), Gdiplus::ImageFormatBMP);
    
    b.DeleteObject();
    image.Destroy();
    c.DeleteDC();
    Bevor ich das Bitmap erzeugte und den Code hatte ohne
    Code:
    c.SelectObject(&b);
    und ohne die Speicherfunktion funktionierte alles (also unsichtbar natürlich); mache ich etwas falsch mit der Zuweisung des DC an das Bitmap?


    Vielen Dank!

  • #2
    Wenn ich das richtig sehe wird hier

    CBitmap b;

    b angelegt und hier der Funktion die Adresse von b

    c.SelectObject(&b);

    übergeben.

    Nur b ist nichts.....nicht intitialisiert
    Christian

    Comment


    • #3
      Ach so! Ja stimmt; wie initialisiere ich das Bitmap? Mit CreateBitmap und der Grösse (RECT) des Metafileheaders?
      Versuchte folgendes:
      Code:
      CBitmap *b;
      	CDC c;
      	c.CreateCompatibleDC(NULL);
      	   
      	CRect clientrect;
      	ENHMETAHEADER HEADER=(((CMainFrame *)AfxGetMainWnd())->MFileHeader);
      clientrect.top=HEADER.rclBounds.top; clientrect.bottom=HEADER.rclBounds.bottom;
      clientrect.right=HEADER.rclBounds.right; clientrect.left=HEADER.rclBounds.left;
      	HENHMETAFILE H=(((CMainFrame *)AfxGetMainWnd())->hMFile);
      	b->CreateBitmap(HEADER.rclBounds.left,HEADER.rclBounds.top,1,32, NULL);
      	c.SelectObject(b);
      c.PlayMetaFile(H,&clientrect);
      
      CImage image;
              
              image.Attach(b //komme nicht weiter da
      Aber es klappte nicht; komme da nicht weiter. Zeichnete noch nie in ein Bitmap und die image-Kasse ist mir eben auch ganz neu.
      Zuletzt editiert von C.M.Obrecht; 30.08.2008, 13:57.

      Comment

      Working...
      X