Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Bitmap drucken erzeugt nur ein weißes Blatt (https://www.delphipraxis.net/168070-bitmap-drucken-erzeugt-nur-ein-weisses-blatt.html)

tofse 3. Mai 2012 11:42

Bitmap drucken erzeugt nur ein weißes Blatt
 
Hallo,

ich versuche, ein Bitmap zu drucken. Im PDFCreator klappt das, aber sobald ich einen anderen Drucker auswähle, kommt nur ein weißes Blatt raus:(
Im Forum habe ich diese Lösung gefunden:
Code:
procedure PrintBitmap(aCanvas: TCanvas; Dest: TRect; Bitmap: TBitmap);
var Info: PBitmapInfo;
    InfoSize: DWord;
    Image: Pointer;
    ImageSize: DWord;
begin
  with Bitmap do
  begin
    GetDIBSizes(Handle, InfoSize, ImageSize);
    Info := AllocMem(InfoSize);
    try
      Image := AllocMem(ImageSize);
      try
        GetDIB(Handle, Palette, Info^, Image^);
        if not Monochrome then
          SetStretchBltMode(ACanvas.Handle, STRETCH_DELETESCANS);
        with Info^.bmiHeader do
          StretchDIBits(aCanvas.Handle, Dest.Left, Dest.Top,
            Dest.RIght - Dest.Left, Dest.Bottom - Dest.Top,
            0, 0, biWidth, biHeight, Image, Info^, DIB_RGB_COLORS, SRCCOPY);
      finally
        FreeMem(Image, ImageSize);
      end;
    finally
      FreeMem(Info, InfoSize);
    end;
  end;
end;
Damit funktioniert es, aber ich würde gerne verstehen, wo das Problem liegt. Bei uns im Haus gibt es doch viele verschiedene Druckermodelle, und da möchte ich mich schon auf eine Lösung verlassen können, ohne jeden Drucker auszutesten...

Gruss
Christof

SirThornberry 3. Mai 2012 11:45

AW: Bitmap drucken erzeugt nur ein weißes Blatt
 
Funktioniert der Quelltext generell oder ist das der Quelltext der nicht immer funktioniert?

Ich vermute mal das ist der Quelltext der immer funktioniert. Dir jetzt zusagen warum mit deinem anderen Quelltext das ganze nicht immer funktioniert fällt natürlich schwer wenn man den Quelltext nicht kennt. Ich vermutet du verwendest StretchBlt oder BitBlt in deinem anderen Quelltext anstelle von Stretchdibits

tofse 3. Mai 2012 11:47

AW: Bitmap drucken erzeugt nur ein weißes Blatt
 
Achso :-D
der obige Code funktioniert.
Mein Versuch ist mit Printer.Canvas.StretchDraw(); gescheitert (aus bei einem PDF Drucker)

SirThornberry 3. Mai 2012 11:48

AW: Bitmap drucken erzeugt nur ein weißes Blatt
 
Dann sollte meine Begründung stimmen. Es liegt am Stretchdraw.

tofse 3. Mai 2012 11:50

AW: Bitmap drucken erzeugt nur ein weißes Blatt
 
Zitat:

Zitat von SirThornberry (Beitrag 1164708)
Es liegt am Stretchdraw.

Und warum ?
Mit Draw hat es auch nicht funktioniert, und das habe ich aus diesem Tipp: Bild drucken

SirThornberry 3. Mai 2012 11:52

AW: Bitmap drucken erzeugt nur ein weißes Blatt
 
Weil das zeichnen von StretchBlt und BitBlt (was intern verwendet wird) nicht für Drucker geeignet ist. Deswegen verwendet man StretchDIBits


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz