Archiv verlassen und diese Seite im Standarddesign anzeigen : pixel in cm uwandeln/rechnen
Mastakilla85
23.12.2001, 01:07
hi leute.
ich bin grad dabei mir ein coverdruckprogramm zu schreiben. es ist fast alles fertig, nur mitm drucken hapert es n bischen. er druckt zwar, aba das bild hat dann nicht die richtige größe. falls ihr wisst wie das geht, sagt bidde bescheid. und wen ihr lust habt es umzurechnen. die vorderseite 12x12cm und die hinterseite 12x15cm.
Greetz & Thx Mastakilla85
Ich habe Dir im WbC auch geantwortet:
Hast Du schon was rausgefunden? Wenn nicht, ich habe mir auch mal ein Coverdruckprogramm programmiert und habe Dein Problem so gelöst:
uses Printers;
procedure Grafik_mm_Druck(Grafik:TGraphic;Mass:double;MassIstErwarteteBreite:boolean;
links,oben:integer);
var
h:THandle;
waagerechtePixel,senkrechtePixel:integer;
BildHoehe,BildBreite:double;
r:TRect;
function rechnen(a:integer;w:double):integer;
begin
result:=round((a * w) / 25.4);
end;
begin
h:=printer.handle;
if MassIstErwarteteBreite then begin
BildHoehe:=Mass * (grafik.height / grafik.width);
BildBreite:=Mass;
end else begin
BildBreite:=Mass * (grafik.width / grafik.height);
BildHoehe:=Mass;
end;
waagerechtePixel:=getdevicecaps(h,logpixelsx);
senkrechtePixel:=getdevicecaps(h,logpixelsy);
links:=rechnen(waagerechtePixel,links)-getdevicecaps(h,physicaloffsetx);
oben:=rechnen(senkrechtePixel,oben)-getdevicecaps(h,physicaloffsety);
r:=rect(links,oben,links+rechnen(waagerechtePixel,BildBreite),
oben+rechnen(senkrechtePixel,BildHoehe));
with printer do begin
begindoc;
canvas.stretchdraw(r,Grafik);
enddoc;
end;
end;
// die Werte für die gewünschte Bildbreite (33,true), den Abstand von der
// linken Blattkante (50) und den Abstand von der oberen Blattkante (25)
// werden in Millimetern angegeben
procedure TForm1.Button2Click(Sender: TObject);
begin
Grafik_mm_Druck(Image1.picture.graphic,33,True,50,25);
end;
// der erste Wert ist diesmal die erwartete Bildhöhe (33,false)
procedure TForm1.Button3Click(Sender: TObject);
begin
Grafik_mm_Druck(Image1.picture.graphic,33,False,50,25);
end;
Greetings ...
Somana
Um eine Pixelangabe in mm umzurechnen braucht man blos die Anzahl der Pixel durch dpilogical (Auflösung in dpi) mal 25.4
{Px/dpilogical*25.4} zu nehmen.
Zur Erklärung:
Die Bildschirmauflösung wird in dpi (dots per inch) angegeben. Diese steht in der Registry unter dem Schlüssel: HKEY_LOCAL_MACHINE\Config\0001\Display\Settings\LogicalX
Ein inch sind 25.4 mm
-Leider habe ich keine Ahnung wie man mit Delphi Daten aus der Registry auslesen könnte, liegt aber in der Regel zwischen 72 und 96.
Mastakilla85
04.01.2002, 00:33
hab ich ja probiert, aba er sagt imma dass er MassIstErwarteteBreite und so weida nich kennt. bei welchem ´teil´ muss ich denn den text einfügen? bei nem Buttonclick? PrintDialog? hab kein plan. ?(
greetz Mastakilla85
Bei einem ButtonClick
somana
Mackhack
11.01.2002, 12:36
Hi,
MastaKilla guck dir mal die Site an:
http://home.pages.at/dbr-software/delphi/mm.htm
Da ist wieder das Beispiel Dann siehste wieder dass es ein Button sein muss der es aufruft...
Dann könntest du auch noch so in etwa was machen...
Var
Rect: TRect;
Begin
If PrintDialog1.Execute Then
Begin
Printer:= TPrinter.Create;
Printer.BeginDoc;
SetMapMode(Printer.Handle, MM_TEXT); //oder MM_LOMETRIC
Rect:= Bounds(0, 0, Printer.PageWidth Div 2, Printer.PageHeight Div 2);
Printer.Canvas.StretchDraw(Rect, Form1.Image1.Picture.Graphic);
Printer.EndDoc;
End;
End;
@Tenshoe
Mit Uses Registry
...
reg:= TRegistry.Create;
reg.root:= HKEY_...
reg.openkey...
...
Vielleicht hilft das ja..
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.