Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   24-Bit Bitmap wird nur schwarz/weiß gedruckt (https://www.delphipraxis.net/68142-24-bit-bitmap-wird-nur-schwarz-weiss-gedruckt.html)

Luckie 25. Apr 2006 11:36


24-Bit Bitmap wird nur schwarz/weiß gedruckt
 
Ich drucke auf den Canvas des Druckers. Unteranderem soll auch ein Bitmap als Logo gedruckt werden. Nur leider wird das immer in Graustufen gedruckt:

Delphi-Quellcode:
FLogoBitmap := TBitmap.Create;
FLogoBitmap.PixelFormat := pf24bit;

FLogoBitmap.LoadFromFile(LogoFile);

//Canvas.Draw(LEFTMARGIN*10, -(FLogoBitmap.Height+TOPMARGIN*10), FLogoBitmap);
Canvas.CopyRect(Rect(LEFTMARGIN * 10, -(TOPMARGIN * 10), FLogoBitmap.Width * 10, -(FLogoBitmap.Height * 10)),
  FLogoBitmap.Canvas, Rect(0, 0, FLogoBitmap.Width * 10, FLogoBitmap.Height *10));
Egal, ob ich es jetzt mit Draw oder CopyRect auf den Canvas des Druckers ausgebe, es wird immer nur in Graustufen ausgegeben. Das Bitmap ist ein 24Bit Bitmap mit Paint erstellt. Drucken tue ich zur Zeit auf einen PDF Drucker, dieser ist aber so konfiguriert, dass er Bitmaps mit 24Bit druckt. Aber warum ist das Bitmap auf dem Dokument immer nur in Graustufen?

Einen richtigen Farbdrucker habe ich leider im Moment nicht zur Verfügung.

franktron 25. Apr 2006 11:50

Re: 24-Bit Bitmap wird nur schwarz/weiß gedruckt
 
Also ich würd mal sagen du hats im Druckertreiber "Druckcn in Graustufen" eingestellt

Luckie 25. Apr 2006 11:58

Re: 24-Bit Bitmap wird nur schwarz/weiß gedruckt
 
Eigentlich nicht. Ich habe schon in der Konfiguration des PDF Druckers nachgeguckt, da sah alles in Ordnung aus.

Nachtrag: Die Testseite vom PDF Drucker wird farbig gedruckt, es muss also an meinem Code liegen. Oder kann es mit dem Bitmap zusammenhängen, das von Paint erstellt wird? Ich probiere mal ein anderes aus.

Luckie 25. Apr 2006 13:44

Re: 24-Bit Bitmap wird nur schwarz/weiß gedruckt
 
Neue Erkenntnisse.

Also am Bitmap liegt es nicht. Ich habe jetzt mal das 8Bit Windows Logo aus dem Windows Ordner genommen, das wird auch in Graustufen gedruckt. :wall:

Auch setzen des CopyModes von Canvas hat nichts geholfen, eben so das Benutzen von BitBlt anstatt der VCL Methoden:
Delphi-Quellcode:
BitBlt(Canvas.Handle, LEFTMARGIN * 10, -(TOPMARGIN * 10), FLogoBitmap.Width * 10, -(FLogoBitmap.Height*10),
  FLogoBitmap.Canvas.Handle, 0, 0, SRCCOPY);
Ich werde noch mal wahnsinnig.

himitsu 25. Apr 2006 14:56

Re: 24-Bit Bitmap wird nur schwarz/weiß gedruckt
 
Schau doch mal nach mit was für "Farben" die Canvas des Druckers arbeitet.

Eventuell nach deinen Zeichenversuchen (vorm Absenden des Druckauftrags) den Inhalt der Canvas in ein anders BitMap kopieren und auf dem Bildschirm ausgeben, oder per SaveToFile erstmal in eine Datei.

Luckie 25. Apr 2006 15:17

Re: 24-Bit Bitmap wird nur schwarz/weiß gedruckt
 
Das
Delphi-Quellcode:
     bmp := TBitmap.Create;
      bmp.Width := FLogoBitmap.Width;
      bmp.Height := FLogoBitmap.Height;
      bmp.PixelFormat := pf8bit;

      Canvas.CopyRect(Rect(LEFTMARGIN * 10, -(TOPMARGIN * 10), FLogoBitmap.Width * 10, -(FLogoBitmap.Height * 10)),
        FLogoBitmap.Canvas, Rect(0, 0, FLogoBitmap.Width * 10, FLogoBitmap.Height *10));

        bmp.Canvas.CopyMode := cmSrcCopy;
      Bmp.Canvas.CopyRect(Rect(0, 0, bmp.Width, bmp.Height), Printer.Canvas, Rect(0, 0, bmp.Width, bmp.Height));
      bmp.SaveToFile('d:\test.bmp');
...ergibt eine weiße Fläche in der Größe des Bitmaps. :(

Und das:
Delphi-Quellcode:
bmp := TBitmap.Create;
      bmp.Width := FLogoBitmap.Width;
      bmp.Height := FLogoBitmap.Height;
      bmp.PixelFormat := pf8bit;

      Canvas.CopyRect(Rect(LEFTMARGIN * 10, -(TOPMARGIN * 10), FLogoBitmap.Width * 10, -(FLogoBitmap.Height * 10)),
        FLogoBitmap.Canvas, Rect(0, 0, FLogoBitmap.Width * 10, FLogoBitmap.Height *10));

      Bmp.Assign(FLogoBitmap);
      bmp.SaveToFile('d:\test.bmp');
...ergibt das original farbige Bild wieder.

himitsu 25. Apr 2006 15:40

Re: 24-Bit Bitmap wird nur schwarz/weiß gedruckt
 
Also arbeitet die Canvas des Druckers schonmal in Grau -.-''
(na so wird es natürlich unmöglich sein da farbiges zum Drucker zu bekommen)

eventuell kann/muß man das ja noch irgendwo umstellen,
nur als ich das letztemal mit Printer.Canvas gearbeitet hatte, nahm das erst immer die Standardeinstellung vom Drucker an.
(hab noch'n Demoprogie für die Printer-Unit, kann die ja morgen mal hochladen ... die zeigt zumindestens mal an, was mit/auf der PrinterCanvas möglich ist)

PS: ist das richtig, daß du mal nur Canvas und dann wieder Printer.Canvas verwendest?

Luckie 25. Apr 2006 21:40

Re: 24-Bit Bitmap wird nur schwarz/weiß gedruckt
 
So, es liegt an dem PDF Drucker an der Arbeut. Die Freeware Version kann wohl nur s/w. :wall: Auf meinem Drucker ist es farbig und mit meinem PDF Drucker auch.

Jetzt habe ich aber das nächste Myterium. Der Drucker, druckt es auf dem Kopf und im PDF ist es richtig. :shock:

Delphi-Quellcode:
Canvas.Draw(LEFTMARGIN*10, -(FLogoBitmap.Height+TOPMARGIN*10), FLogoBitmap);
:grubel:

Was ist denn das nun schon wieder? :wall:

SirThornberry 25. Apr 2006 22:21

Re: 24-Bit Bitmap wird nur schwarz/weiß gedruckt
 
das es auf dem Kopf steht liegt am MapMode. Normalerweise wird der Y-Wert bei der Canvas nach unten hin größer. Bei dem Mapmode den du wohl verwendest wird der Y-Wert nach unten hinn jedoch geringer (geht ins Minus). Du musst also das Bild vor dem Drucken auf den Kopf stellen und durch den Mapmode wird es dann zurück gespiegelt.

[OT]@Luckie: Du schreibst das du einen PDF-Drucker in einer eingeschränkten Freeware-Version nutzt. Wieso das? Installiere dir doch einfach einen Postscriptdrucker und installiere das. Mit GSView (Ghostview) kannst du das ganze anschauen und bei bedarf in PDF konvertieren.

Luckie 25. Apr 2006 22:35

Re: 24-Bit Bitmap wird nur schwarz/weiß gedruckt
 
Zitat:

Zitat von SirThornberry
das es auf dem Kopf steht liegt am MapMode. Normalerweise wird der Y-Wert bei der Canvas nach unten hin größer. Bei dem Mapmode den du wohl verwendest wird der Y-Wert nach unten hinn jedoch geringer (geht ins Minus). Du musst also das Bild vor dem Drucken auf den Kopf stellen und durch den Mapmode wird es dann zurück gespiegelt.

Aber warum macht es denn dann der PDF-DRucker richtig?


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr.
Seite 1 von 2  1 2      

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