Entwickler-Ecke

Multimedia / Grafik - Etikett drucken per Printer.StretchDraw,nicht richtig scwarz


jjturbo - Fr 27.08.10 07:48
Titel: Etikett drucken per Printer.StretchDraw,nicht richtig scwarz
Moin Forum,

ich zeichne mir die Daten eines zu druckenden Etikettes auf ein Bitmap, wobei das Längen-/Breitenverhältnis des Bitmaps des tatsächlichen Etiketts entspricht.

Jetzt schicke ich das Bitmap an den Drucker:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  if PrintDialog1.Execute then begin
    with Printer do begin
      Title       := Application.Title + ' Etikett drucken ';
      BeginDoc;
      Canvas.StretchDraw(Canvas.ClipRect,MyImage.Picture.Bitmap);
      EndDoc;
    end;//with Printer do begin
  end;//if PrintDialog1.Execute then begin


Dadurch werden aber schwarze Flächen nicht mehr richtig schwarz dargestellt, die Kanten der Schriften sind unscharf. Wie kann man es besser machen? Auf dem Bildschirm wird alles gestochen scharf dargestellt.

Gruß Oliver


Xion - Fr 27.08.10 08:48

Wenn du StretchDraw verwendest, dann kann es sein, dass er stretched :D Gibts kein einfaches "Draw"

Hast du bedacht dass der Drucker ne höhere Auflösung hat? Machs mal so: Breite und Höhe des Bitmaps mal 3, entsprechend groß das Etikett ins Bitmap zeichnen und dann StretchDraw. Auf dem Drucker muss natürlich die Größe des Rects gleich bleiben, also nicht mal 3


Gerd Kayser - Sa 28.08.10 08:26

user profile iconXion hat folgendes geschrieben Zum zitierten Posting springen:
Hast du bedacht dass der Drucker ne höhere Auflösung hat? Machs mal so: Breite und Höhe des Bitmaps mal 3, entsprechend groß das Etikett ins Bitmap zeichnen und dann StretchDraw. Auf dem Drucker muss natürlich die Größe des Rects gleich bleiben, also nicht mal 3
Es gibt auch Drucker mit krummen Auflösungen, z. B. 600 * 300 dpi. Besser ist es, die Auflösungen (LogPixelsX bzw. LogPixelsY) mit GetDeviceCaps vorher zu ermitteln.
Ich habe auch noch dunkel in Erinnerung (lang ist es her ...), daß man statt Stretchdraw besser StretchDIBits verwenden sollte. Beispiel siehe hier: http://www.swissdelphicenter.ch/de/showcode.php?id=744
Eine andere Alternative wäre, direkt auf Printer.Canvas zu zeichnen und zu schreiben. Gerade beim Erstellen von Ertiketten bietet es sich doch an, bei Printer.Canvas eine Auflösung von 1/10 mm einzustellen. Man kann auch den Koordinatenursprung nach oben links in die Ecke verlegen.
Falls gewünscht, kann ich den SourceCode von meinem Etikettendruckprogramm per Email zuschicken (etwa 500 Zeilen).