Laden...

mm-Skalierung?

Erstellt von JLL vor 16 Jahren Letzter Beitrag vor 16 Jahren 3.418 Views
J
JLL Themenstarter:in
48 Beiträge seit 2006
vor 16 Jahren
mm-Skalierung?

hi,
ich arbeite zurzeit an einem grafikbearbeitungsprogramm und möchte die
Skalierung des lineals in mm angeben.
Das Problem ist nun die Umrechnung von Pixel auf mm.

Wenn ich exakt einen Millimeter breit zeichnen möchte, wieviele Pixel sind das?

Gibt es dafür eine Formel? Es soll ja nicht nur auf meinem Entwicklungsrechner passen, sondern auch unabhängig von Bildschirmgröße, Auflösung, DPI Zahl etc.. immer stimmen.

Ist das überhaupt möglich?!

Vielen Dank schonmal im Vorraus.

MfG
JLL

5.658 Beiträge seit 2006
vor 16 Jahren

Ist das überhaupt möglich?!

Nee, wie denn auch? Du weißt ja nicht, wie groß ein Pixel auf dem Monitor eines x-beliebigen Systems ist. Es gibt zwar die Vereinfachung, die Auflösung eines Monitors auf 72DPI festzulegen, aber das hat nichts mit der tatsächlichen Größe eines Pixels zu tun.
Die beste Möglichkeit ist da noch abzufragen, welche Größe der Monitor hat (Bilddiagonale 17", 19"... in Seitenlängen umwandeln) und durch die gerade eingestellte Bildschirmauflösung in Pixeln zu teilen.
Aber selbst dann funktioniert das nicht, wenn ein Benutzer einen Breitformat-Bildschirm hat, oder einfach ein Fernsehgerät als Ausgabemonitor verwendet.

Schöne Grüße,
Christian

Weeks of programming can save you hours of planning

J
JLL Themenstarter:in
48 Beiträge seit 2006
vor 16 Jahren

Wie realisiert man dann überhaupt WYSIWYG-Anwendungen?

5.658 Beiträge seit 2006
vor 16 Jahren

nach besten Wissen und Gewissen.

Weeks of programming can save you hours of planning

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo JLL,

Wie realisiert man dann überhaupt WYSIWYG-Anwendungen?

WYSIWYG bedeutet ja nur, dass das was man am Bildschirm sieht, (weitestgehend) mit dem übereinstimmt, was gedruckt wird. Es heißt aber nicht, dass 1 mm am Bildschirm auch ein 1 mm auf dem Papier ist.

herbivore

5.658 Beiträge seit 2006
vor 16 Jahren

Er meint sicher solche Funktionen von DTP- oder Grafik-Programmen, wo man auf "100%" Zoomen kann, und damit angeblich die Originalgröße repräsentieren.

Es wäre wirklich einmal interessant, wie genau das umgesetzt wird. Ich hab das mal vor einiger Zeit ausprobiert (man braucht ja nur eine A4-Seite an den Bildschirm zu halten), und es hat nur halbwegs gestimmt. Es waren auf meinem damaligen 17" Monitor einige cm Abweichung, aber welches Programm das war, hab ich vergessen. Quark oder PageMaker oder sowas...

Weeks of programming can save you hours of planning

J
JLL Themenstarter:in
48 Beiträge seit 2006
vor 16 Jahren

ja genau so meine ich das.

gibt es dafür eine formel?

Pixel in mm usw.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo JLL,

ja, die Formel ist trivial:

Pixel / Auflösung in mm = mm

Das Problem ist, dass bei jedem Bildschirm und je nach Einstellungen die Auflösung in mm unterschiedlich ist.

herbivore

J
JLL Themenstarter:in
48 Beiträge seit 2006
vor 16 Jahren

Hi herbivore,

habe schon gegoogelt und finde echt nichts dazu.
zu dieser formel bin ich auch schon gekommen und zu anderen die ich auf diversen
foren gefunden habe.

Hat jemand mit solchen Anwendung erfahrung oder weis jemand wie eine einigermaßen genau berechnung aussehen sollte? (für alle auflösungen usw.)

wäre für jede information dankbar.

1.271 Beiträge seit 2005
vor 16 Jahren

Hallo zusammen,

Also so wie ich das sehe ist das total simpel:
Im System.Drawing-Namespace gibt es die Enumeration GraphicsUnit. Ein Graphics-Object hat die Eigenschaft PageUnit dieses Typs. Wenn man da z.B. Millimeter einstellt und dann ein Rechteck mit Breite 100 zeichnet, müsste eigentlich ein Rechteck erscheinen, das immer 10cm breit ist.

Am besten probieren es so viele aus wie möglich, dann haben wir einen guten vergleich.
Bei mir funktionierts (17", 1280x1024).

Gruß,
Thomas

A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee

Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.

M
231 Beiträge seit 2007
vor 16 Jahren

Oder du machst beim Progstart ein Eingabefenster, indem der User die Bildschirmgröße angeben muss.

Daraus kannst du ca. die Bildschirmgröße in cm bzw mm berechen.

Aus der eingestellten Auflösung kannst du dann ein Verhältnis errechnen, welches dir die Pixellänge auf dem Bildschirm angibt.

Logisch passt das nicht zu 100% aber wer misst schon auf dem Bildschirm nach ob das jetzt 100mm oder 98mm sind...

Gruß MB


Gruß MB

Home of DigiJay - DJ-Freeware

S
709 Beiträge seit 2005
vor 16 Jahren

Hallo zusammen!

Original von progger
Bei mir funktionierts (17", 1280x1024).

Kann ich bestätigen. Funzt bei mir auch. (Linie ziemlich exakt 10cm lang)

vg,
Simon

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo zusammen,

Bei mir funktionierts (17", 1280x1024).

es wird bei alle denen relativ gut funktionieren, bei denen die von der Anwendung angenommene Auflösungm der Monitors in DPI mit der tatsächlichen Auflösung ihres Monitors in DPI übereinstimmt. Trotzdem bleibt es eine Annahme der Anwendung die dann versagt, wenn die tatsächlich Auflösung des Monitors in DPI abweicht.

herbivore

J
JLL Themenstarter:in
48 Beiträge seit 2006
vor 16 Jahren

ja stimmt herbivore.

das problem ist wenn ich die pageunit auf mm umstelle funktioniert die
positionierung der maus nicht so richtig.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo JLL,

... funktioniert die positionierung der maus nicht so richtig.

geht das auch genauer? Siehe [Hinweis] Wie poste ich richtig? Punkt 5.

herbivore

J
JLL Themenstarter:in
48 Beiträge seit 2006
vor 16 Jahren

😉

Die ganzen objekte werden mit der maus gezeichnet.
Wenn ich jetzt z.B. bei 10:10 (x:y) ansetze wird das objekte oberhalb des Mauscursors gezeichnet. Das markieren von den gezeichneten objekten funktioniert auch nicht genau. Irgendwie wird die mausposition dann falsch angezeigt/gesetzt.

Alle Objekte werden auf eine picturebox gezeichnet
(Rechtecke, Kreise, Bilder usw.)

Alle Events kommen von der picturebox
(MouseMove, MouseDown, MouseUp usw.)

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo JLL,

wenn du als PageUnit mm verwendest, musst an die Zeichenoperationen natürlich die Parameter auch als mm-Angaben übergeben und kannst nicht einfach die Pixelwerte nehmen, die du von MouseMove, MouseDown, MouseUp bekommst. Oder andersherum, wenn du Pixelwerte an die Zeichenoperationen übergeben willst, dann musst du als PageUnit Pixel verwenden.

herbivore