Entwickler-Ecke
Multimedia / Grafik - Drucker verkleindert grafik
mimi - So 29.06.03 13:47
Titel: Drucker verkleindert grafik
Hallo,
ich wil ein bild ausdrucken, und der drucker verkleinert die grafik, warum ?
nyx - Di 14.10.03 01:49
Weil Röhrenbildschirme in aller Regel eine geringere Anzahl an Bildpunkten pro Zoll oder Zentimeter haben, als Drucker. Wenn Dein Bild beispielsweise 640 x 480 pixel groß ist, bedeutet das in etwa bei den üblichen 72 dpi, die ein Monitor (laut meiner Grafikapplikation) hat, daß das Bild ca. 23 cm breit dargestellt... hust hust.. ich weiß hängt auch von der dargestellten Auflösung und der Bilddiagonalen des Monitors ab. Ich will ja nur mal klugscheißern :D
So und im Gegensatz dazu nimm Deinen Drucker, der vielleicht bei einer Auflösung von 300 dpi druckt. Das bewirkt schlußendlich, daß Dein Bild auf dem Papier nur 5,4 cm breit erscheint.
Gerade in Printsachen muß man zwei Dinge beachten - das zu druckende Bild - muß je nach Qualitätsansprüchen - genügend Pixelinformationen haben und zudem noch die adequate Angabe der dpi-Zahl (dots per inch). Wenn letzteres nicht stimmt, könnts bei einem professionellen Druckereiauftrag ein böses Erwachen geben :wink:
mimi - Di 14.10.03 17:17
also muss ich die passende größe selbst herrausfinden.
weil ich habe folgendeds gemacht:
ich hahtte eine papier vorlage und diese habe ich auf meine TFT nachgebaut mit Delphi.
wenn ich das bild jetzt aber unter Picture Publisher drucke hat es die richtige größe warum ? und wie bekommt man diese abweichung rauß ?
PheliX - Di 14.10.03 18:28
Hi!
Villeicht hilft dir das ja weiter:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| uses printers
function getpix_x(cm:real):integer; var ppi:Integer; i:real; begin ppi:= GetDeviceCaps(printer.Handle,LOGPIXELSX); i:= (ppi * cm) / 2.54; result:= round(i+0.5); end;
function getpix_y(cm:real):integer; var ppi:Integer; i:real; begin ppi:= GetDeviceCaps(printer.Handle,LOGPIXELSY); i:= (ppi * cm) / 2.54; result:= round(i+0.5); end; |
ci@o
Felix
mimi - Mi 15.10.03 17:07
danke werde ich gleich testen *G*
mimi - Mi 15.10.03 17:56
wenn ich deine funktionen so benutze:
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: 29: 30:
| procedure TForm1.BitBtn1Click(Sender: TObject); var x,y,i:Integer; begin with Image1.Canvas do begin ShowMessage(IntToStr(getpix_x(18))); for x:=0 to getpix_x(18) do Pixels[x,0]:=clBlack; for x:=0 to getpix_x(18) do Pixels[x,getpix_y(7.7)]:=clBlack;
for y:=0 to getpix_y(7.7) do Pixels[0,y]:=clBlack; for y:=0 to getpix_y(7.7) do Pixels[getpix_x(18),y]:=clBlack;
end; end; |
bekomme ich bei der X sachen viel zu große werte rauß. woran kann das liegen ?
PheliX - Do 16.10.03 19:28
Hmmm :?:
Weiß ich jetzt auch nit.. aber wenn dein Drucker auf beiden Seiten die gleiche Auflöduns hat (was weiß ich: 360*360) dann kannst du auch nur die Y Variante nehmen!
Cu
Felix
PS: Ich konnte irgendwie nicht so ganz erkennen was dein Programm machen soll... naja!
mimi - Do 16.10.03 19:56
gans einfach:
es soll eine beschrieftung für meine CD boxen ausdrucken. mehr nicht.
aber wie schaffe ich das, das ist in der größe ausgedruckt wird in der es auch angezeigt wird ?
Micrografx Picture Publisher 8 schaft dies ja auch
PheliX - Do 16.10.03 21:43
Pass auf: jeder Drucker hat eine verschiedene Auflösung.
Du musst wenn du zum Beispiel ein Etikett drucken willst, das 5 cm breit und 2 cm hoch ist, die Pixels für den Drucker ausrechenen. (Das is n bissel schwer zu erklären :) )
dann gibst du in meine Funtion 2 ein (also 2 cm) dann fragt das Programm die Auflösung des Druckers ab und rechnet dann die Pixelzahl aus.
Also, du machst dann dein Etikett z.B. in ein Canvas uns kopierst das dann auf das DruckerCanvas mit Stretchdraw (oder wie das heißt?!?)
Ich weiß jetzt nit, ob dir das was geholfen hat, aber ich habs versucht *g*
cu
mimi - Fr 17.10.03 18:10
danke, könnte du noch ein kleines beispiel posten ?
Danke*G*
PheliX - Fr 17.10.03 22:15
Das Beispiel:
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: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls,printers;
type TForm1 = class(TForm) bt_ellipse: TButton; Image1: TImage; bt_print: TButton; procedure bt_ellipseClick(Sender: TObject); procedure bt_printClick(Sender: TObject); private public end;
var Form1: TForm1;
implementation
function getpix(cm:real):integer; var ppi:Integer; i:real; begin ppi:= GetDeviceCaps(printer.Handle,LOGPIXELSX); i:= (ppi * cm) / 2.54; result:= round(i+0.5); end;
{$R *.dfm}
procedure TForm1.bt_ellipseClick(Sender: TObject); begin Image1.Canvas.Ellipse(Image1.ClientRect); end;
procedure TForm1.bt_printClick(Sender: TObject); var rect:Trect; begin
rect.Left:=0; rect.Top:=0;
rect.Right:=getpix(5); rect.Bottom:=getpix(2.5);
with printer do begin BeginDoc; Canvas.StretchDraw(rect,Image1.Picture.Bitmap); enddoc; end; end;
end. |
Jetzt wird das wahrscheinlich SEEEEEHR seltsam aussehen.
Wenn du das ganze perfekt machen willst muss du das ganze Bild auf das Canvas proportional zeichnen (getpix)
ich hoffe das hat dir jetzt n bissel geholfen!
Viel Glück
Felix
mimi - Sa 18.10.03 17:02
also vergrößern wollte ich das bild auch wieder nicht, es soll nur in der orgnial größe angezeigt werden, mehr möchte ich garnicht, das das so schwer ist, hätte ich nie gedacht.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!