Entwickler-Ecke
Sonstiges (Delphi) - Pixel in Zentimeter
klezmor - So 17.04.05 14:38
Titel: Pixel in Zentimeter
Hallo für mein Programm brauche Längenangaben in Zentimeter.
Wie kann ich also cm in pixel umrechnen bzw. wieviele pixel sind ein cm?
Delete - So 17.04.05 14:42
Ich würde es nicht umrechnen, sonder den MapMode mit
SETMAPMODE auf MM_LOMETRIC oder auf MM_HIMETRIC setzten. da du nicht sagst in wie fern du das in deinem Programm brauchst, kann ich nicht sagen, ob dir das hilft.
klezmor - So 17.04.05 14:45
ich weiß aller dings nicht was der mapmode ist
Delete - So 17.04.05 15:04
klezmor hat folgendes geschrieben: |
ich weiß aller dings nicht was der mapmode ist |
Schon mal auf den Link in meinem Beitrag geklickt?
Heiko - So 17.04.05 15:10
@klezmor: Du meinst doch mit Zentimetern, dass der Drucker in Zentimetern drucken soll und nicht in Pixeln? Oder meinst du, dass es auf dem Bildschirm ein 1cm sein soll?
LH_Freak - So 17.04.05 15:18
ich denke er will einfach wissen:
1 cm entrspricht x Pixeln
und andersrum.
Oder??
Delete - So 17.04.05 15:22
Ja, aber wenn man wüßte, was er vor hat, bräuchte er das eventuell gar nicht wissen.
LH_Freak - So 17.04.05 15:23
ja, ich sag's ja nur. :D
Heiko - So 17.04.05 15:40
Ich glaub wir sollten erst mal auf klezmor warten, bevor wir alle Varianten aufzählen was er gemeint haben könnte :wink: .
klezmor - Mo 18.04.05 16:23
Ok tut mir leid, dass ich mich erst so spät zurückmelde aber ich war anderweitig beschäftigt.
so sieht das problem aus:
In meinem Programm bewegt sich ein shape per timer nach unten um eine realistische Fallgeschwindigkeit darzustellen brauche ich wie schon gesagt diesen um rechnugsfaktor von cm in pixel bzw pixel in cm.
mein programm sieht bis jetzt so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.Timer1Timer(Sender: TObject);var ortsfaktor:integer; g:double; begin g:=9.81; t:=t+1;
strecke:=round((0.5 * g *(t*t)));
shape1.top:=strecke; label1.caption:=inttostr(v); end; |
Oh lasst euch bitte nicht von diesem schlechten Beispiel irritieren mir fällt gerade ein, dass der Faktor dann auch von dem Timerintervall abhängt also schlecht.
Vielleicht habt ihr eine bessere, elegantere Lösung, bis jetzt habe ich ein Timerintervall von 1ms, damit das shape schön regelmäßig beschleunigt hinunterfliegt.
Finde diese Lösung aber schlecht könnt ihr mir helfen?
oder ganz einfach: körper soll realistisch beschleunigt nach unten fallen.
Moderiert von
raziel: Delphi-Tags hinzugefügt.
theTJ - Di 19.04.05 14:59
Hi klezmor,
Einen festen Faktor gibt es nicht, da die größe der Pixel von der Auflösung des Bildschirmes abhängt...
Heiko - Di 19.04.05 18:28
Soweit ich weiß hat der PC-Monitor normalerweise 72 dpi. Aber auf einem Flachbildschirm sieht es außerdem anders aus, als auf einem Röhrenmonitor, da der Röhrenmonitor eine gewölbte Oberfläche hat. Deswegen sieht ein 17" Flachbildschirm größer aus als ein Röhrenmonitor. Aber ich will hire nicht zu weit vom Thema abtreiben mit der Diskussion zwischen Röhrenmonitor und Flachbildschirm.
Bei deinem Programm wär es auch sinnvoll nicht ein Zentimeter mit der Reallität zu vergleichen, da ein Bildschirm, von der Größe her, begrenzt ist. Dadurch kann es sein, dass man den fallenden Körper kaum wahrnimmt, wordurch die demonstration fast sinnlos ist, bisauf du willst zeigen, wie schnell das wirklich ist.
klezmor - Mi 20.04.05 20:14
ja ich will schon zeigen wie das wirklich ist.
aber dieses Programm sollte auch nur ein Testprogramm sein ich will einen Pendelschwung simmulieren und da wäre es schon nützlich, wenn ich das realistisch darstellen könnte, per ortsfaktor ließe sich das natürlich auch noch verlangsamen.
Heiko - Mi 20.04.05 20:20
Dann darfst du ja wirklich nur eine sehr kurze Schnur nehmen. Die Schnur darf bei einer Bidschirmhöhe von 1024 Pixel max. 14cm lang sein (ohne Gewicht gerechnet). Oder du musst alles in einem bestimmten Maßstab nehmen. Ich glaube aber, dass du mit 72 dpi getrost arbeiten darfst.
klezmor - Mi 20.04.05 20:25
soll das jetzt heißen 1024 pixel entsprechen 14 cm bei einer Auflösung von 72 dpi ?
delfiphan - Mi 20.04.05 22:55
Heiko hat folgendes geschrieben: |
Die Schnur darf bei einer Bidschirmhöhe von 1024 Pixel max. 14cm lang sein |
Heiko: Es gibt keinen fixen Zusammenhang zwischen Pixeln und cm. Das kommt eben auf die DPI draufan.
1 DPI = 1 Pixel pro Inch = 1 Pixel pro 2.54 cm
72 DPI = 72 Pixel pro 2.54 cm = 28.3 Pixels pro cm
=> 1024 Pixels entsprechen (1024/72*2.54) cm = 36 cm
:arrow: "17" Bildschirm" bedeutet: Diagonale ist |17*2.54| cm lang.
:arrow: Das Bildschirmverhältnis ist üblicherweise 4:3.
Das bedeutet dann:
Bildschirmbreite = |4/5*Zoll*2.54| cm
Bildschirmhöhe = |3/5*Zoll*2.54| cm
Falls nun die Bildschirmauflösung auch 4/3 ist, z.B. 1024x768, dann berechnet sich die DPI aus:
|DPI| = |(5/4)/Zoll*MaxX|;
Beispiel: 17" Bildschirm (4:3)
Bildschirmbreite = |4/5*17*2.54| cm = 34.5 cm
Bildschirmhöhe = |3/5*17*2.54| cm = 25.9 cm
Der Bildschirm hat |(5/4)/17*1024| DPI = 75.29 DPI
Es ist noch zu bemerken, dass bei Bildschirmen häufig die Diagonale des ganzen Monitors und meist nicht die effektive Diagonale der Bildfläche angegeben ist. Der effektive DPI Wert ist also meist etwas tiefer als der Wert, den man sich berechnet. Wenn es genau sein muss, kannst du ja die Bildschirmdiagonale selbst ausmessen :)
CrazyLuke - Mi 20.04.05 23:20
Zitat: |
Die Auflösung ist tatsächlich unerheblich, wenn ein Bild rein digital verarbeitet und angezeigt wird. Deshalb hat das GIF-Format so etwas gar nicht: GIF wurde ausschließlich für den Screen erschaffen. Bei den Digitalkameras sind wir da ebenfalls schon einen Schritt weiter. Da fragt nämlich keiner nach, wieviele Zentimeter die Bilder breit sind oder welche Auflösung sie besitzen. Hier dreht sich alles um Megapixel. Und das ist der richtige Ansatz. Erst wenn man das Ganze ausdrucken möchte, wenn also die Pixel wieder in Zentimeter umgewandelt werden, ist das Einführen einer Auflösung als Umrechnungsfaktor wichtig. |
Der 72dpi-Mythos [
http://praegnanz.de/essays/137/] :D
Außerdem heißt es streng genommen ppi, denn es geht ja um Bilder mit Pixeln. Und dieser ppi-Wert wird (wie im Zitat beschrieben) erst wichtig, wenn das Ding in den Druck soll. Das Ergebnis ist ein Bild mit Punkten (Dots), also dpi...
MfG
CrazyLuke
delfiphan - Mi 20.04.05 23:27
@CrazyLuke: Das Ziel von klezmor ist es, ein Pendel massstabgetreu auf dem Bildschirm darzustellen. Dazu sind diese Rechnungen unumgänglich.
Das wichtigste hätte ich beinahe vergessen. Wenn der DPI einmal bekannt ist, kannst du in deinem Programm einfach eine Konstante
Delphi-Quelltext
1: 2:
| Const cm = DPI/2.54; |
definieren.
Mit
Rectangle(0,0,1*cm,1*cm) kannst du dann z.B. ein Quadrat mit Höhe/Breite 1cm zeichnen.
Heiko - Do 21.04.05 06:54
@delfiphan: :autsch: Ich hatte beim schreiben meines letzten Postes vergessen, das dpi ja Inch sind, und keine Zentimeter :oops: .
Aber ich hab ne Idee zum lösen diese Problem. ICh bezweifle zwar das die wirklich funktioniert, aber probieren kann man es ja mal. Man könnte doch
Delphi-Quelltext
1:
| SetMapMode(Form1.Handle, MM_LOMETRIC); |
verwenden. Ich glaub aber das diese Variante auch nicht funktioniert, aber probieren kann man es.
Delete - Do 21.04.05 11:36
Ihr braucht den ganzen Umrechnungskram nicht. Stellt den MapMode um und zeichne auf dein Canvas in Zentimetern. Wo ist das Problem?
delfiphan - Do 21.04.05 11:46
Ich denke das ist Geschmackssache. Entweder macht es das Betriebsystem oder man macht es gleich selbst. Ich will ja nicht alles in cm angeben, eigentlich will ich gar nichts in cm angeben, sondern möchte nur den richtigen "Zoom-Faktor". Ich finde ich hab dann eine höhere Kontrolle über das Geschehen. Ist wahrscheinlich auch portabler. Wie gesagt ist es wohl einfach Geschmackssache. Wenn man es schlussendlich ausdrucken will, sieht das ganze wieder anders aus.
Ich dachte es ist so oder so mal sinnvoll, die Rechnung zu posten.
Heiko - Do 21.04.05 19:39
@Luckie
Das ich doch in meiem Post vor deinem Post schon gesagt. Ich wusste nur nicht, ob die Variante wirklich funktioniert.
Habe ich mit Form1.Handle richtig getippt gehabt?
klezmor - Di 26.04.05 16:34
und wie kann ich den mapmode von pixel in centimeter umstellen?
Heiko - Di 26.04.05 17:39
Wie bereits geschrieben mit SetMapMode.
klezmor - Di 17.05.05 11:16
Heiko hat folgendes geschrieben: |
Wie bereits geschrieben mit SetMapMode. |
Einfach der Befehl SetMapMode(); eingeben oder?
raziel - Di 17.05.05 13:34
Hallo,
Ich habe hier ein paar Off-Topic Beiträge entfernt. Wenn Du etwas
Konstruktives beizutragen hast,
Fabian W., dann tu das. Ansonsten lass es bitte.
Gruß,
raziel
klezmor - Mi 18.05.05 19:22
Kann mir mal jemand erklären was der Setmapmode ist und wie er funktioniert aus der online Hilfe von msd werde ich auch nicht schlauer.
Ich rufe diese Funktion in meinem Programm auf: SetMapMode(Form1.handle, MM_LOMETRIC);
wenn ich jetzt schreibe shape1.width:=100; müsste das shape doch genau ein Zentimeter breit sein oder?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!