Entwickler-Ecke

Sonstiges (Delphi) - Drucken eines Images viel zu klein WARUM???


Sabine - Do 03.03.05 15:52
Titel: Drucken eines Images viel zu klein WARUM???
Hallo Ihr lieben,


ich bin durch eure Hilfe jetzt zum Ende gekommen mit meinem Programm.
Aber eines beschäftigt mich noch.

Wenn ich mein Image drucke kommt es immer zu klein aus dem Drucker raus und nicht wie angezeigt in der Form (0.5mm x 0.5mm)

Ich brauch das aber 4cm x 3,5 cm.

Weis da einer Rat???

So drucke ich das Image:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm_Haupt.Button1Click(Sender: TObject);
begin

with Printer do
  begin
    BeginDoc;     { Beginn des Druckens }
    Canvas.Draw(153,209,Image1.Picture.Bitmap);  
    EndDoc;       { Ende des Druckens }  
  end



end;


jasocul - Do 03.03.05 16:21

Der Ausdruck hängt von der Auflösung des Druckers ab (DPI). Darauf hatte ich schon im anderen Thred hingewiesen.
Leider ist es bei mir schon ein paar Jahre her, dass ich TPrinter benutzt haben. Ich meine aber, dass man das mit SetDeviceCaps einstellen kann.


Sabine - Fr 04.03.05 11:08

Hallo Ihr lieben,

ich komme nicht mehr weiter
jetzt erscheind bei mir nur noch eine leer Seite aus dem Drucker



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure TForm_Haupt.Button1Click(Sender: TObject);
var xdpi, ydpi : extended;
     x, y,a,b :integer;

begin

with Printer do
  begin
    BeginDoc;     { Beginn des Druckens }

xdpi:=GetDeviceCaps(Printer.Handle,LOGPIXELSX)/2.54;
ydpi:=GetDeviceCaps(Printer.Handle,LOGPIXELSY)/2.54;

   a:= 500;
   b:= 500;
   x:= 150;
   y:= 250;

Printer.Canvas.StretchDraw(RECT(X,Y,ROUND(X+xdpi*a),ROUND(Y+ydpi*b)),Image1.Picture.Graphic);







    EndDoc;       { Ende des Druckens }
  end;


BenBE - Fr 04.03.05 14:07

Wenn die Ausgabe bei Canvas zu groß ist, schlägt der BitBlt-Aufruf, der für die entgültige Darstellung zuständig ist, fehl. Teil das auszugebende Bild in mehrere kleine Bilder auf.

Siehe auch in der W32OH unter BitBlt, welche inschränkungen gelten. Gleiches gilt z.B. auch für die Rechtecksfunktion von Windows.


Sabine - Mo 07.03.05 09:18

Zitat:
Wenn die Ausgabe bei Canvas zu groß ist, schlägt der BitBlt-Aufruf, der für die entgültige Darstellung zuständig ist, fehl. Teil das auszugebende Bild in mehrere kleine Bilder auf.

Siehe auch in der W32OH unter BitBlt, welche inschränkungen gelten. Gleiches gilt z.B. auch für die Rechtecksfunktion von Windows.


Kann mir das mal einer Erklären so das ich das als Änfängerin auch versteh???


Erzengel - Mo 07.03.05 12:54

Versuchs doch mal so.... :P


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TForm_Haupt.Button1Click(Sender: TObject);
var xdpi, ydpi : extended;
     x, y,a,b :integer;

begin

with Printer do
  begin
    BeginDoc;     { Beginn des Druckens }

xdpi:=GetDeviceCaps(Printer.Handle,LOGPIXELSX)/2.54;
ydpi:=GetDeviceCaps(Printer.Handle,LOGPIXELSY)/2.54;

   a:= 5;
   b:= 5;
   X:= 1;
   Y:= 4;

Canvas.StretchDraw(RECT(X,Y,ROUND(X+xdpi*a),ROUND(Y+ydpi*b)),Image1.Picture.Graphic);



    EndDoc;       { Ende des Druckens }
  end;

end;


Sabine - Mo 07.03.05 12:57

Hy Erzengel vielen Dank für deine Hilfe.
Es geht jetzt.... :oops: