Bitmap drucken



  • Hallo zusammen,

    auf meinem Dokument-Header drucke ich unter anderem ein kleines Bitmap. Die Druckfunktion sieht folgendermaßen aus:

    CBitmap bmp;
    CDC memDC;
    
    memDC.CreateCompatibleDC(NULL);
    
    bmp.LoadBitmap(IDB_HEADER);
    CBitmap* pOldBmp = memDC.SelectObject(&bmp);
    pDC->StretchBlt(clientRect.left + 20, clientRect.top + m_headerHeight, 323, 36, &memDC, 0, 0, 323, 36, SRCCOPY);
    
    memDC.SelectObject(pOldBmp);
    bmp.DeleteObject();
    memDC.DeleteDC();
    

    Das Problem ist nun, dass das Bitmap in der Druckvorschau und bei PDF-Ausdrucken IMMER erscheint, bei Ausgabe am Drucker (2 getestet) allerdings nicht.
    Um genauer zu sein erscheint es am Drucker sporadisch, dh. manchmal wird es mit ausgedruckt, manchmal nicht. Konnte leider noch keine Regelmäßigkeit feststellen und weiß somit auch nicht von welchen Kriterien es abhängt, ob das Bild nun gedruckt wird oder nicht...

    Wäre nett, wenn mir hier (wieder einmal) jemand weiterhelfen könnte!

    danke, mfg



  • Wo steht denn der von dir gepostete Code? So kann man schwer beurteilen woran es liegen könnte.



  • Am Beginn meiner Funktion

    DrawHeader(CDC* pDC, CRect clientRect)
    

    welche in OnDraw aufgerufen wird.

    Nach dem oben geposteten Code werden noch weitere Textausgaben gemacht und eine Linie unterhalb des Headers gezeichnet. Der Text und die Linie werden im Gegensatz zum Bitmap immer korrekt gedruckt.

    Die Positionsangaben des Bitmpas müssten so eigentlich passen, da die Positionen des Texts und der Linie auch auf clientRect beruhen.

    Hilft das weiter oder braucht ihr noch weitere Informationen? Einfach fragen!

    danke, mfg



  • Naja, jeder Drucker unterstützt verschiedene Auflösungen. Das würde vielleicht erklären warum das mit dem PDF-Printer geht und mit dem anderen eben nicht. Wenn du das ganze in der OnDraw machst dann müsstest du ja auch unterscheiden ob du drucken willst oder ob die Darstellung ins Fenster geht. Schon mal über die Mapping-Modi nachgedacht?



  • Ok, hab in meinem Code oben eine kleine (aber wichtige) Sache ausgelassen. Der Aufruf der StretchBlt-Funktion sieht in Wirklichkeit folgendermaßen aus:

    pDC->StretchBlt(clientRect.left + 20 * logPixelsX, clientRect.top + m_headerHeight * logPixelsY, 323 * logPixelsX, 36 * logPixelsY, &memDC, 0, 0, 323, 36, SRCCOPY);
    

    Die Variablen logPixelsX und logPixelsY dienen eben der Angleichung der Auflösung. Diese Methode benutze ich eigentlich auch bei allen anderen Drucker- und Bildschirmausgaben (zB. Text- und Linie-Ausgabe).

    Mir ist mittlerweile schon klar, dass ich das ganze mit meinen logPixelsX und Y wahrscheinlich auch über die Mapping-Modi regeln hätte können, allerdings hatte ich beim implementieren von diesen noch keine Ahnung (bin relativer Neuling in Sachen MFC) und ein nachträgliches Umstellen will ich mir vorerst eigentlich ersparen, weil es einfach zuviel Aufwand bedeuten würde.

    Eigenartig ist einfach, dass das Bitmap auf ein und demselben Drucker manchmal gedruckt wird und manchmal nicht (wodurch ein Fehler mit meinen LogPixelsX und Y wohl ausgeschlossen werden kann)...



  • Keiner mehr eine Idee zum Thema? Steh ziemlich auf dem Schlauch und hab keine Ahnung, woher das Verhalten kommen kann...

    danke, mfg

    ps.: Sorry fürs pushen...


Anmelden zum Antworten