![]() |
Canvas ausdrucken
Hallo
Habe ein kleines Problem. Ich möchte von einem TImage den Canvas oder das Picture.Bitmap auf einen Drucker ausdrucken. Eigentlich ganz einfach mit
Delphi-Quellcode:
Wenn mein picture.canvas nur 500 height und 500 width hat.
printer.draw(1,1,image1.picture.bitmap);
Wenn ich aber 2000 height und 2000 width habe, kommt beim drucker nichts mehr an. Kann mir bitte jemand helfen. Danke A_hingerl |
Re: Canvas ausdrucken
Verwende Stretchdraw.
|
Re: Canvas ausdrucken
Ja, StretchDraw hilft dir da weiter. Und wenn du das ganze Papier ausnutzen möchtest und dabei aber das Breiten-Höhen-Verhältnis beibehalten werden soll, dann errechne das für StretchDraw benötigte Rechteck mit der nachfolgenden Routine :-D
Delphi-Quellcode:
(* ***********************************************************
Ein Rechteck fuer "StretchDraw" auf dem Drucker erzeugen *********************************************************** *) function ScaleToPrint (Img:TImage;Prn:TPrinter;Center:Boolean):TRect; var h,w,r:Single; Rect:TRect; begin with Prn do with Img.Picture.Graphic do begin { Verhaeltniss errechnen } w := PageWidth/Width; h := PageHeight/Height; { begrenzendes Verhaeltniss } if w<h then r:=w else r:=h; { in linke obere Ecke legen } Rect.Left := 0; Rect.Top := 0; Rect.Right := Trunc(r*Width); Rect.Bottom := Trunc(r*Height); { Center ? } if Center then begin Rect.Left := (PageWidth-Rect.Right) div 2; Rect.Right := Rect.Right+Rect.Left; Rect.Top := (PageHeight-Rect.Bottom) div 2; Rect.Bottom := Rect.Bottom+Rect.Top; end; end; { zuweisen } Result:=Rect; end; |
Re: Canvas ausdrucken
Danke für die prompte Antwort.
Aber mit Strechdraw und Copyrect und sonstigen Möglichkeiten hab ichs bereits probiert. Es geht ja auch. Nur wenn das Timage eine gewisse Größe erreicht (2000x2000) gehts plötzlich nicht mehr. Weiß jemand woran das liegen kann? A.Hingerl |
Re: Canvas ausdrucken
Ich hab schon mit mehren Methoden probiert, es funktioniert ja auch.
Aber beim Ausdrucken mit AdobePDF kommt immer nur ein weißes Blatt. mytar :-D |
Re: Canvas ausdrucken
Zitat:
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; |
Re: Canvas ausdrucken
Danke. es funktioniert perfekt.
Habe aber noch ein kleines Problem. Die Grafik (Timage) ist 2000 x 1000 und auf dem Bildschirm eine riiiiesen Grafik. Wenn ich es mit PrintBitmap ausdrucke und entsprechend vergrößere, ist es auf einem Laserdrucker etwas unscharf?? Es ist Barcode mit dabei und sollte eigentlich doch scharf sein, da sonst die Barcode-scanner ein problem bekommen werden. Gibts da auch noch ne elegante lösung?? Danke A.Hingerl |
Re: Canvas ausdrucken
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz