Unterschied Ausdruck/Druckvorschau



  • Hallo,

    ich hab in einem MFC-MDI Projekt ein Bitmap in die View gezeichnet. Auf der Druckvorschau erscheint dies Bild ebenfalls korrekt - nur auf dem Ausdruck erscheint es nicht.

    Hier der Code um das Bild zu zeichnen. Ich hab verschiedene Varianten ausprobiert, die immer das gleiche Fehlerbild lieferten.

    void CMyView::DrawLogo(CDC* pDC)
    {	
    
    	BITMAP bm; 
    	m_Logo.GetBitmap(&bm);//
    	CRect ZRect(LEFT, LinesNumber(7), LEFT+bm.bmWidth, LinesNumber(7)+bm.bmHeight);
    
    	CDC SpeicherDC; 
    	SpeicherDC.CreateCompatibleDC( pDC ); 
    	CBitmap* pOldBitmap = SpeicherDC.SelectObject(&m_Logo);//
    
    	//
    	pDC->BitBlt(LEFTBORDER, LinesNumber(7), bm.bmWidth, bm.bmHeight, &SpeicherDC, 
             0, 0, SRCCOPY);//
    
    	   SpeicherDC.SelectObject(pOldBitmap);//
    
    }
    

    (entnommen einem Beispiel aus der MSDN)
    Schriftzeichen werden aber korrekt angezeigt und gedruckt.
    Wo liegt der Fehler?

    Micha



  • Aus eigener schmerzvoller Erfahrung würde ich sagen: Wenn du alles gecheckt hast, versuch mal einen anderen Druckertreiber oder einen anderen Drucker, am besten von einem anderen Hersteller.

    Ich arbeite hier mit List&Label10 und Kyocera Druckern und bei jedem Treiber stimmen andere Sachen auf den Ausdrucken nicht. 🙄
    Auf einem HP Drucker funktionierte es super, dafür druckte der immer eine Seite vorweg und eine hinterher wo "Es wird gedruckt..." draufstand. 😡



  • Danke für den Hinweis, ich hab es mit verschiedenen Druckern probiert, u.a auch HP und PDF-Drucker aber immer war der gleiche Fehler.
    Mir ist aber aufgefallen, das in der linken, oberen Ecke, wo das Bild anfangen sollte ein schwarzen Pixel im Ausdruck ist. Ich habe noch andere Bilder auf der Seite die im Ausdruck korrekt sind, nur dies eine Bild ist in meinen Resourcen gespeichert und stellt sich noch quer. Falls jemanden noch was einfällt währ ich ihm sehr dankbar.

    Micha



  • *push*

    Der o.g. Fehler besteht immernoch. Hat jemand Vorschläge zur Lösung?

    Micha



  • probier mal das bitmap 2x zu zeichnen. das hat bei mir mal geholfen.

    es gibt eine lösung, die irgendwie mit dem laden des bitmaps zu tun hat. da muss ich aber erst nachsehen und suchen, ob ich die stelle noch finde...



  • habs gefunden:

    bool CToReportView::DrawBitmap(CDC* pDC,UINT nBitmapRes,CRect rect)
    {
    	//TRACE("CToReportView::DrawBitmap\n");
    	CDC dc;
    	if(!dc.CreateCompatibleDC(pDC))
    		return false;
    
    	CBitmap bitmap;
    	//if(!bitmap.LoadBitmap(nBitmapRes)) return false; // alte Methode
    	// nachdem LoadBitmap ein device-abhängiges Bitmap liefert hier der Workaround 
    
    	if(!bitmap.Attach(::LoadImage(::AfxFindResourceHandle(MAKEINTRESOURCE (nBitmapRes), RT_BITMAP),
    		MAKEINTRESOURCE (nBitmapRes),IMAGE_BITMAP,0,0,LR_DEFAULTSIZE | LR_CREATEDIBSECTION)))
    		return false;
    
    	dc.SelectObject(&bitmap);
    
    	BITMAP bmpInfo;
    	if(!bitmap.GetBitmap(&bmpInfo))
    		return false;
    
    	int nRatio = (bmpInfo.bmWidth * rect.Height()) / bmpInfo.bmHeight;
    
    	if(!pDC->StretchBlt(rect.left,rect.top,nRatio,rect.Height(),&dc,
    		0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,SRCCOPY))
    		return false;
    
    	bitmap.DeleteObject();
    	dc.DeleteDC();
    	return true;
    }
    


  • Vielen Dank dwo77!!!
    Dein Code funktioniert!!


Anmelden zum Antworten