![]() |
zentimetergenaues Zeichnen auf Monitor unmöglich?
Moin, Moin.
Ich möchte auf einem Canvas (Monitor) Linien im exakten Horizontalabstand von 1cm zeichnen. Nix leichter als das - dachte ich. Dafür gibt's ja Funktionen, die dich die Anzahl der Pixel je Zentimeter berechnen lassen. Meine bisherigen Versuche scheitern aber dummerweise kläglich :x
Delphi-Quellcode:
Die beiden ersten Varianten liefern z.B. auf meinem Notebook abweichende Angaben von 37 bzw. 35 Pixel/cm. Die dritte Variante (die lt. Delphihilfe für horizontale Auflösungen nicht verwendet werden sollte) liefert wieder ein Ergebnis von 37 Pixel/cm. Korrekt sind die Werte allerdings in keinem Fall - richtig wären 34 Pixel/cm. Für alle mir zugänglichen PC-Monitore werden ebenfalls falsche Ergebnisse ermittelt. Ursachenforschung ist bei der Variante 1 möglich: Der Wert für HorzSize (also die horizontale Breite in mm) wird in allen untersuchten Fällen falsch zurückgeliefert.
procedure GetHorPixelsPerCM;
var DC : HDC; HorPixCM_v1, HorPixCM_v2 : Integer; begin DC:=GetDC(0); HorPixCM_v1:=Trunc(GetDeviceCaps(DC,LOGPIXELSX)/2.54); ShowMessage('pixel/cm'#13'Variante mit LogPixelsX'#13 +IntToStr(HorPixCM_v1)); HorPixCM_v2:=MulDiv(GetDeviceCaps(DC,HorzRes),10,GetDeviceCaps(DC,HorzSize)); ShowMessage('pixel/cm'#13'Variante mit HorzRes+HorzSize'#13 +IntToStr(HorPixCM_v2)); ShowMessage('pixel/cm'#13'Variante mit Screen.PixelsPerInch (nur vertikal gültig)'#13 +IntToStr(Trunc(Screen.PixelsPerInch/2.54))); ReleaseDC(0,DC); end; Fragen:
|
Re: zentimetergenaues Zeichnen auf Monitor unmöglich?
Zitat:
Also wenn's 100% stimmen soll, dann muss der Benutzer die Breite und Höhe seines Monitor in Millimeter eingeben. Die Auflösung kann du ja abfragen (Screen.Width, Screen.Height) und damit die Pixel/mm als Fliesskommazahl errechnen. |
Re: zentimetergenaues Zeichnen auf Monitor unmöglich?
Bei mir war die Ausgabe
37 34 37 Ich habs nachgemessen und 34 stimmt folglich sind die 37 Werte Falsch ;) getestet an einer GForce 8800GTS mit DualMonitorsystem ( Jeweils 19", 1280 x 1024 ) Ich mach das übrigens immer so das das ich mir vom User die Abmase ( meist da ich das ja nur beim Drucken brauche sind die schon bekannt ) geben lasse und rechne das dan mittels dreisatz von hand aus. Solltest du das wirklich für Monitorausgabe benötigen ist das natürlich nicht mehr so praktisch .. Vorallem da du ja die Auflösung beliebig ändern kannst. |
Re: zentimetergenaues Zeichnen auf Monitor unmöglich?
Es gibt nur beim Monitor nur die Variante den Benutzer die Breite eingeben zu lassen. Alles andere ist ungenau. Denn wenn jemand einen Röhrenmonitor hat kann er das Bild breiter, schmaler, höher etc. machen. Und diese Werte kannst du nunmal nicht auslesen.
|
Re: zentimetergenaues Zeichnen auf Monitor unmöglich?
Kann auch den MapeMode mit
![]() |
Re: zentimetergenaues Zeichnen auf Monitor unmöglich?
was aber auch keine große Genautigkeit hat da dies nicht berücksichtigt wie man das Bild per Monitor gezerrt hat.
|
Re: zentimetergenaues Zeichnen auf Monitor unmöglich?
Das geht nur, wenn die Bildschirmauflösung und die physikalische Höhe/Breite eines Pixels bereits vorher bekannt sind. Wobei ein "programmiertes Pixel" nichts mit der physischen Darstellung des Pixels auf dem Monitor zu tun hat.
Stell mal bei einem 17"-Monitor 640x480 ein. Dann kannst Du wieder von vorne anfangen ;-( |
Re: zentimetergenaues Zeichnen auf Monitor unmöglich?
Liste der Anhänge anzeigen (Anzahl: 1)
Zunächst einmal Danke für die Hinweise und Anregungen!
Um das Thema für mich und andere die das vielleicht noch einmal lesen abzuschließen, hier eine kleine Zusammenzufassung:
|
Re: zentimetergenaues Zeichnen auf Monitor unmöglich?
Liste der Anhänge anzeigen (Anzahl: 1)
Was meinst Du mit "Die Balken haben immer 5 cm Breite" ?
|
Re: zentimetergenaues Zeichnen auf Monitor unmöglich?
Ich denke mal das die Balken immer exakt 5cm breit seien sollten.
Laut der eingesetzten Funktionen jedenfals... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 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