| Autor |
Beitrag |
Alibi
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: Fr 07.02.03 16:27
Hi,
ich habe ein Problem mit dem Ausdrucken von dem Canvas eines TImages.
So mach ich das momentan:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Diagrammdrucken1Click(Sender: TObject); var DestRect: TRect; begin DestRect.Left := 20; DestRect.Top := 20; DestRect.Right := Printer.PageWidth - 40; DestRect.Bottom := Printer.PageWidth - 40; Printer.BeginDoc; Printer.Canvas.CopyRect(DestRect,Image1.Canvas,Image1.Canvas.ClipRect); Printer.EndDoc; End; |
Nunja, aber durch das Skalieren mit CopyRect wird das Bild zwar schön groß, ist aber selbstveständlich stark verpixelt.
Skalier ich das nicht kommt ein Image, was 400x400 Pixel hat ca 3x3cm da raus, viel zu hohe Auflösung also.
Wie krieg ich nun ein 400x400 großes TImage auf ein DinA4 Blatt mit mindestens 10 cm Seitenlänge?
|
|
MathiasH
      
Beiträge: 699
WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
|
Verfasst: Fr 07.02.03 17:31
Hallo
da kommst du um das pixeln nicht herum, ausser du veränderst die Auflüsung des Druckers (bewirkt eigentlich das selbe, sieht aber besser aus).
Das ligt daran, dass die Auflösung eines Druckers um ein Vielfaches größer ist, als die des Bildschirms.
MathiasH
_________________ "Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche
|
|
Alibi 
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: Fr 07.02.03 18:17
Wie änder ich die Auflösung des Printers?
PageWidth und PageHeight ändern?
|
|
DaRkFiRe
      
Beiträge: 526
WinXP Home & Professional
C, C++, Delphi
|
Verfasst: Fr 07.02.03 19:48
Zuerst einmal musst Du rausfinden, wieviel Pixel 1 cm auf dem Drucker hat:
Quelltext 1: 2:
| xdpi:=GetDeviceCaps(Printer.Handle,LOGPIXELSX)/2.54; ydpi:=GetDeviceCaps(Printer.Handle,LOGPIXELSY)/2.54; |
Sagen wir mal, du willst Image1 auf dem Drucker ausgeben - und zwar an der Stelle X,Y und zwar mit den Abmaßen a x b
Quelltext 1: 2: 3:
| Printer.BeginDoc; Printer.Canvas.StretchDraw(RECT(X,Y,ROUND(X+Image1.Width/xdpi*a),ROUND(Y+Image1.Height/ydpi*b)),Image1.Picture.Graphic); Printer.EndDoc; |
Der Code sollte funktionieren - so skaliert man ein Bild zentimetergenau auf dem Drucker. Viel Spaß!
_________________ Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
|
|
Alibi 
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: Fr 07.02.03 22:35
Hi,
vielen dank, aber als ich für a und b jeweils 15 eingesetzt hab war das Bild sage und schreibe 0.5*0.5cm groß. :/
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Sa 08.02.03 00:20
Hi,
mach es einfach so:
Quelltext 1:
| Printer.Canvas.CopyRect(Rect(0,0,Printer.PageWidth,Printer.PageHeight),Image1.Canvas,Rect(0,0,Image1.Width,Image1.Height)); |
Au'revoir,
Aya
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
DaRkFiRe
      
Beiträge: 526
WinXP Home & Professional
C, C++, Delphi
|
Verfasst: Sa 08.02.03 02:03
@aya: Damit streckt man das Bild auf den ganzen Drucker.
@alibi: Sorry - mein Fehler:
Quelltext 1: 2: 3: 4: 5: 6:
| xdpi:=GetDeviceCaps(Printer.Handle,LOGPIXELSX)/2.54; ydpi:=GetDeviceCaps(Printer.Handle,LOGPIXELSY)/2.54;
Printer.BeginDoc; Printer.Canvas.StretchDraw(RECT(X,Y,ROUND(X+xdpi*a),ROUND(Y+ydpi*b)),Image1.Picture.Graphic); Printer.EndDoc; |
Damit sollte das Bild jetzt richtig gestreckt werden. Allerdings wird hierbei das Höhen-Breitenverhältnis nicht mit einbezogen. Bei weiteren Fragen einfach nochmal posten  Nacht!
_________________ Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca
|
|
Alibi 
      
Beiträge: 458
Win2K SP3
Delphi 6 Ent
|
Verfasst: Sa 08.02.03 02:24
Funktioniert, genauso verpixelt zwar wie mein erster Versuch, aber nicht schlimm, vielen dank an alle.
|
|
SevenValues
      
Beiträge: 25
XP, ME, 98
Delphi 6 PE
|
Verfasst: Mo 29.12.03 16:09
Hi!
Bin ich seit 08.02.2003 der Einzige, der laufend den Fehler
[Error] Unit1.pas(57): There is no overloaded version of 'Rect' that can be called with these arguments
bekommt?
Grüße
7
_________________ Nacht ist, wenn einer das Licht ausschaltet.
|
|
|