![]() |
Pixel in Millimiter umrechnen mit dieser Funktion ?
Hallo
ich wollte vor dem Drucken die Maße des Bildes in mm anschauen ich möchte diese Funktion verwenden. Ich erhalte immer einen Fehler wie rufe ich die Funktion auf ? ![]() |
Re: Pixel in Millimiter umrechnen mit dieser Funktion ?
na du übergibst der Funktion dein Canvas (worauf zu zeichen willst),
bekommst die Pixel pro Millimeter zurück und verrechnest diese dann mit der Größe deines Bildes.
Delphi-Quellcode:
PS: mit
Var X, Y: Single;
PixelsPerMM(Canvas, X, Y); MMWidth := Bild.Witdh / X; MMHeight := Bild.Height / Y; ![]()
Delphi-Quellcode:
[edit] / und nicht * :oops:
SetMapMode(Printer.Canvas.Handle, Modus);
// Modus = MM_HIMETRIC // 1 Pixel = 0.01 Millimeter // MM_LOMETRIC // 1 Pixel = 0.1 Millimeter [add] @Luckie: schneller :tongue: |
Re: Pixel in Millimiter umrechnen mit dieser Funktion ?
Benutze die API-Funktion
![]() |
Re: Pixel in Millimiter umrechnen mit dieser Funktion ?
Es klappt nicht
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var X, Y: Single; begin PixelsPerMM(Canvas, X, Y); Edit3.Text := IntToStr(StrToInt(Edit1.Text) / X); Edit4.Text := IntToStr(StrToInt(Edit2.Text) /Y); end; |
Re: Pixel in Millimiter umrechnen mit dieser Funktion ?
Wieso ignorierst Du, was andere antworten? SetMapMode benutzen und Du hast Deine Milimeter.
|
Re: Pixel in Millimiter umrechnen mit dieser Funktion ?
Zitat:
ich kann's mir zwar denken ... schau mal in die OH, was zu IntToStr steht und schau dir dann z.B. FloatToStr an. |
Re: Pixel in Millimiter umrechnen mit dieser Funktion ?
Zitat:
|
Re: Pixel in Millimiter umrechnen mit dieser Funktion ?
Es hat zwar geklappt aber keine gute Funktion
ich erhalte nicht die richtige Maße meines Bildschirms Mein Bildschirm ist 1152 x 864 Pixels (etwas 37,6 cm) aber mit der Funktion erhalte ich 32 cm !
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } procedure PixelsPerMM(canvas: TCanvas; var x, y: Extended); public { Public-Deklarationen } end; var Form1: TForm1; myscreenWidth, myscreenHeight :Extended; implementation {$R *.dfm} procedure TForm1.PixelsPerMM(canvas: TCanvas; var x, y: Extended); var H:HDC; hres,vres, hsiz,vsiz:integer; begin H:=canvas.handle; hres := GetDeviceCaps(H,HORZRES) ; {display width in pixels} vres := GetDeviceCaps(H,VERTRES) ; {display height in pixels} hsiz := GetDeviceCaps(H,HORZSIZE) ; {display width in mm} vsiz := GetDeviceCaps(H,VERTSIZE) ; {display height in mm} x := hres/hsiz; y := vres/vsiz; myscreenWidth:=screen.Width/x; // in mm myscreenheight:=screen.Width/y; end; procedure TForm1.Button1Click(Sender: TObject); var X, Y: Extended; begin PixelsPerMM(Form1.Canvas, X, Y); Edit1.Text := FloatToStr(X); { the x value holds the pixels per mm horizontally } Edit2.Text := FloatToStr(Y); { the y value holds the pixels per mm vertically } Edit3.Text:=FloatToStr(myscreenWidth); Edit4.Text:=FloatToStr(myscreenheight); end; end. Kann jemand mir ein beispiel mit SetMapMode geben ? |
Re: Pixel in Millimiter umrechnen mit dieser Funktion ?
ist der DPI-Wert für deinen Monitor eigentlich richtig eingestellt?
(nicht daß da nur irgendwo 'ne falsche Angabe steht) ich frag mich auch, was du mit myscreenWidth und myscreenHeight anstellst. :shock:
Delphi-Quellcode:
procedure TForm1.PixelsPerMM(canvas: TCanvas; var x, y: Extended);
var H:HDC; hres,vres, hsiz,vsiz:integer; begin H:=canvas.handle; hres := GetDeviceCaps(H,HORZRES) ; {display width in pixels} vres := GetDeviceCaps(H,VERTRES) ; {display height in pixels} hsiz := GetDeviceCaps(H,HORZSIZE) ; {display width in mm} vsiz := GetDeviceCaps(H,VERTSIZE) ; {display height in mm} x := hres/hsiz; y := vres/vsiz; end; procedure TForm1.Button1Click(Sender: TObject); var X, Y: Extended; begin PixelsPerMM(Form1.Canvas, X, Y); Edit1.Text := FloatToStr(X); { the x value holds the pixels per mm horizontally } Edit2.Text := FloatToStr(Y); { the y value holds the pixels per mm vertically } Edit3.Text := FloatToStr(screen.Width * X); Edit4.Text := FloatToStr(screen.Height * Y); end; und falls es dir noch nicht aufgefallen ist, HORZSIZE und VERTSIZE geben bereits die größe in Millimetern an, wozu willst du also noch rechnen? (Pixel / 1 mm) * Pixel = mmFürAllePixel
Delphi-Quellcode:
// für jeden Monitor einzeln
var h: hDC; hsiz, vsiz: Integer; begin // i = Index des Monitors // 0 >= i < Screen.MonitorCount h := GetDC(Screen.Monitors[i].Handle); hsiz := GetDeviceCaps(h, HORZSIZE); vsiz := GetDeviceCaps(h, VERTSIZE); ReleaseDC(Screen.Monitors[i].Handle, h); Edit1.Text := FloatToStr(hsiz) + 'mm'; Edit2.Text := FloatToStr(vsiz) + 'mm'; end; // für den Desktop var h: hDC; hsiz, vsiz: Integer; begin h := GetDC(GetDesktopWindow); hsiz := GetDeviceCaps(h, HORZSIZE); vsiz := GetDeviceCaps(h, VERTSIZE); ReleaseDC(GetDesktopWindow, h); Edit1.Text := FloatToStr(hsiz) + 'mm'; Edit2.Text := FloatToStr(vsiz) + 'mm'; end; |
Re: Pixel in Millimiter umrechnen mit dieser Funktion ?
Liste der Anhänge anzeigen (Anzahl: 1)
Was meint er hier mit "Die Balken haben immer 5 cm Breite" ?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz