none
drucken gdi bmps RRS feed

  • Frage

  • schon wieder ein problem beim drucken:

    neben text drucke ich auch kleine bilder (eher icons, firmenlogo usw). diese habe ich in der exe als ressource hinterlegt. der code lädt sie zur laufzeit per CBitmap::LoadBitmap. die bilder sind bmp-dateien, im ressourceneditor prima zu sehen. das eine bild hat 24-bit farbtiefe, das andere nur 4.

    das drucken selbst läuft per CDC::StretchBlt bzw. TransparentBlt.

    hier auf meinem entwicklungsrechner (VC6, Vista) läuft das alles super. trage ich diese exe nun auf einen anderen rechner (xp), werden alle texte ebenfalls gedruckt, aber die grafiken fehlen einfach im ausdruck. ich habs auf mehreren druckern und auch per PDF und XPS-Druckern versucht - die grafiken fehlen.

    mit einem ressourcenbetrachter sehe ich, daß die bilder innerhalb der exe als ressource vorhanden sind, also daran liegts nicht.

    wenn ich das erzeugte xps-dokument auspacke und ansehe, finde ich auf dem vista-rechner ein verzeichnis, in dem die zu druckenden bilder als png liegen, auf dem xp-rechner fehlen diese bilder.

    jemand einen ansatz, woran sowas liegen könnte?

    Freitag, 3. Dezember 2010 13:02

Antworten

  • hat sich erledigt.

    für alle, die es noch interessiert: hatte wohl nichts mit xp vs. vista zu tun. man darf die grafik nicht per CBitmap::LoadBitmap laden, weil sie hierdurch geräteabhängig erstellt wird und damit nicht wie sie soll zum drucker geschickt wird.

    stattdessen muß man per ::LoadImage eine geräteunabhängige grafik erzeugen udn diese an ein CBitmap::Attach en.

    gibt dazu einiges im www zu finden, aber das kürzeste ist vermutlich das hier und es funktioniert prima:

    VERIFY (bm.Attach (::LoadImage (::AfxFindResourceHandle(
     MAKEINTRESOURCE (inBitmapID), RT_BITMAP),
     MAKEINTRESOURCE (inBitmapID), IMAGE_BITMAP, 0, 0,
     (LR_DEFAULTSIZE | LR_CREATEDIBSECTION))));
    
    vgl. http://www.programmersheaven.com/2/Art_CPP_1

    Montag, 6. Dezember 2010 14:04

Alle Antworten

  • Und wo ist nun das Problem?
    Wird es falsch angezeigt oder wundert Dich nur, dass die Grafiken anders behandelt werden.

    Vermutlich ist der XPS Treiber auf XP ein anderer als unter Windows7/Vista...


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Freitag, 3. Dezember 2010 13:14
    Moderator
  • > Und wo ist nun das Problem?

    problem ist, daß auf dem xp-rechner keine grafiken gedruckt werden. sie fehlen ganz einfach

    sowohl beim drucken zu

    - xps, als auch zu

    - pdf (mit dem gleichen pdf-erzeuger installiert wie bei vista), als auch auf

    - einem richtigen drucker (auf den selben, auf den ich auch von vista aus drucke und wo grafiken gedruckt werden)

    Freitag, 3. Dezember 2010 13:36
  • Die GDI Systeme von Vista und XP unterscheiden sich gravierend.
    Zeig mal den Code, mit dem Du solch eine Grafik ausgibst.

    Versuch noch mal über einen Memory DC zu gehen, in den Du zuerst schreibst und dann nur noch BitBlt verwendest auf den Drucker DC.


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Montag, 6. Dezember 2010 08:11
    Moderator
  • hat sich erledigt.

    für alle, die es noch interessiert: hatte wohl nichts mit xp vs. vista zu tun. man darf die grafik nicht per CBitmap::LoadBitmap laden, weil sie hierdurch geräteabhängig erstellt wird und damit nicht wie sie soll zum drucker geschickt wird.

    stattdessen muß man per ::LoadImage eine geräteunabhängige grafik erzeugen udn diese an ein CBitmap::Attach en.

    gibt dazu einiges im www zu finden, aber das kürzeste ist vermutlich das hier und es funktioniert prima:

    VERIFY (bm.Attach (::LoadImage (::AfxFindResourceHandle(
     MAKEINTRESOURCE (inBitmapID), RT_BITMAP),
     MAKEINTRESOURCE (inBitmapID), IMAGE_BITMAP, 0, 0,
     (LR_DEFAULTSIZE | LR_CREATEDIBSECTION))));
    
    vgl. http://www.programmersheaven.com/2/Art_CPP_1

    Montag, 6. Dezember 2010 14:04