Autor Beitrag
Alibi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: Fr 07.02.03 16:27 
Hi,
ich habe ein Problem mit dem Ausdrucken von dem Canvas eines TImages.
So mach ich das momentan:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: Fr 07.02.03 18:17 
Wie änder ich die Auflösung des Printers?
PageWidth und PageHeight ändern?
DaRkFiRe
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 526

WinXP Home & Professional
C, C++, Delphi
BeitragVerfasst: Fr 07.02.03 19:48 
Zuerst einmal musst Du rausfinden, wieviel Pixel 1 cm auf dem Drucker hat:

ausblenden 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

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Sa 08.02.03 00:20 
Hi,

mach es einfach so:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 526

WinXP Home & Professional
C, C++, Delphi
BeitragVerfasst: Sa 08.02.03 02:03 
@aya: Damit streckt man das Bild auf den ganzen Drucker.

@alibi: Sorry - mein Fehler:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 458

Win2K SP3
Delphi 6 Ent
BeitragVerfasst: Sa 08.02.03 02:24 
Funktioniert, genauso verpixelt zwar wie mein erster Versuch, aber nicht schlimm, vielen dank an alle.
SevenValues
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25

XP, ME, 98
Delphi 6 PE
BeitragVerfasst: 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.