AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Raster in Millimeter vs. Pixel zeichnen

Ein Thema von Jazzman_Marburg · begonnen am 6. Nov 2010 · letzter Beitrag vom 6. Nov 2010
Antwort Antwort
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#1

Raster in Millimeter vs. Pixel zeichnen

  Alt 6. Nov 2010, 12:14
Hallo Gemeinde,
mal wieder mit einem Brett vor dem Kopf unterwegs -- hoffe es findet sich ein Experte, der es mir kurzeitig entfernen hilft.

Ich zeichne ein Grid (Raster) so wie man es aus einem kariertem Rechenheft kennt. Bei einer Voreinstellung von 20 Pixeln wird also jede 20 Pixel eine vertikale bzw. eine horizontale Linie gemalt -- woraus also das Raster entsteht. Nun möchte ich dieses Raster auf Millimeter-Einheiten umstellen, und tue mich damit schwer.
Mein Algorithmus sieht z.Z. so aus:

1. Voreinstellung (irgendeine beliebige Größe)
Delphi-Quellcode:
FBigUnits := 20;
...
2. In der Procedure CalcUnits berechne ich, wieviele der FBigUnits auf meine Zeichenfläche passen (getrennt für horizontal und vertikal):
Delphi-Quellcode:
FBigHorizontalUnits := FHeight DIV FBigUnit;
FBigVerticalUnits := FWidth DIV FBigUnit;
3. In der Procedure DrawGrid zeichne ich anschließend die vertikalen und horizontalen Linien:
Delphi-Quellcode:
FOR i := 0 TO FBigVerticalUnits DO
BEGIN
  XPos := ROUND(i * FBigUnit);
  Canvas.MoveTo (XPos, 0);
  Canvas.LineTo (XPos, FHeight);
END;
Entsprechendes für die FBigHorizontalUnits.

So, jetzt möchte ich, dass nicht alle 20 Pixel eine Linie gezeichnet wird, sondern alle 20 Millimeter. Dazu habe ich bei DelphiAbout.com diese Procedure gefunden:
Delphi-Quellcode:
procedure PixelsPerMM(canvas: TCanvas; var x, y: single) ;
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;
Aber ich stehe auf dem Schlauch, wie dies jetzt in meinen o.g. Algorithmus passen soll. Sieht ja schon ziemlich danach aus, als ob sie geeigent wäre,
nur weiss ich nicht, was ich mit den x und y nach dem Aufruf von PixelPerMM anfange...

Jemand eine Idee, wie ich mein Raster auf Millimeter umgestellt bekomme?

Lieben Dank & Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Raster in Millimeter vs. Pixel zeichnen

  Alt 6. Nov 2010, 12:18
Das sind Faktoren mit den du die Koordinaten multiplizieren musst.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Raster in Millimeter vs. Pixel zeichnen

  Alt 6. Nov 2010, 12:55
Wäre es nicht einfacher, mit SetMapMode auf 1/10 Milimeter umzustellen? Leider habe ich nie nachgemessen, ob das bei Monitoren zuverlässig funkioniert, bei Druckern tut es jedenfals.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Raster in Millimeter vs. Pixel zeichnen

  Alt 6. Nov 2010, 13:00
Bei Monitoren funktioniert das nicht. Erst recht nicht bei Röhrenmonitoren wo man das Bild beliebig zerren kann.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Raster in Millimeter vs. Pixel zeichnen

  Alt 6. Nov 2010, 13:03
Sowas hatte ich bereits befürchtet.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#6

AW: Raster in Millimeter vs. Pixel zeichnen

  Alt 6. Nov 2010, 13:12
Das sind Faktoren mit den du die Koordinaten multiplizieren musst.
Tschuldigung, aber ich muß nochmal nachfragen.
D.h die Multiplikation mit x und y muß hier erfolgen?

Delphi-Quellcode:
FOR i := 0 TO FBigVerticalUnits DO
BEGIN
  XPos := ROUND(i * FBigUnit * x); // Das gleiche für YPos => * y
  Canvas.MoveTo (XPos, 0);
  Canvas.LineTo (XPos, FHeight);
END;
Aber hier doch sicher auch?

Delphi-Quellcode:
FBigHorizontalUnits := FHeight DIV FBigUnit;
FBigVerticalUnits := FWidth DIV FBigUnit;
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz