Laden...

Scalierung Pixel / MM

Erstellt von Stu42 vor 16 Jahren Letzter Beitrag vor 16 Jahren 7.261 Views
S
Stu42 Themenstarter:in
506 Beiträge seit 2006
vor 16 Jahren
Scalierung Pixel / MM

Hallo,

ich habe ein virtuelles Din A4 blatt, welches ich in meinem Programm Disignen will.
Alles was ich also im Disigner Editiere ist X mal so groß wie auf dem Blatt Papier.

Also wenn mein Blatt 210 mm Breit ist, und ich das Blatt z.b. auf 600 pixel scalieren will, wie groß ist dann mein Scalierungsfaktor?

Also was muss ich da genau rechnen?

Gruß Stu

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Stu42,

erstmal kannst du bei GDI als Einheit GraphicsUnit.Milimeter angeben und schon musst du selber nicht mehr umrechnen.

Und was die eigentliche Frage angeht, das ist nicht dein Ernst, oder? Du fragst und nicht wirklich nach einer so simplen Dreisatzaufgabe. Bitte überlege und löse doch sowas bitte wirklich selber. Sowas muss jeder (Hobby-)Programmierer können.

herbivore

S
Stu42 Themenstarter:in
506 Beiträge seit 2006
vor 16 Jahren

ja wie groß ist denn ein Pixel In MM?

Das Variiert doch immer...

Edit: Und die Unit auf MM ist so eine Sache, da dann alles verzeht ... z.B. ein Pen im Dash Style...

148 Beiträge seit 2006
vor 16 Jahren

I cna tpye 300 wrods pre mnuite!

S
Stu42 Themenstarter:in
506 Beiträge seit 2006
vor 16 Jahren

bin ich auch schon draufgestoßen...

ändert aber nichts am Problem, das die Pixelgröße variiert.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Stu42,

dein Vorgabe war:

wenn mein Blatt 210 mm Breit ist, und ich das Blatt z.b. auf 600 pixel scalieren will

daraus ergibt sich automatisch und fest, wie groß ein Pixel ist.

herbivore

S
Stu42 Themenstarter:in
506 Beiträge seit 2006
vor 16 Jahren

ja so ganz hab ich es noch nicht begriffen.

daraus ergibt sich automatisch und fest, wie groß ein Pixel ist.

Stimmt nur teilweise...

Die Korrdinaten kannst du über nen Dreisatz tranformieren. Aber wie sieht es mit der Größe aus?

Die Korrdinaten sind zwar alle um einen Factor von (600 / 210) verändert.

Das heißt doch aber nicht das ein Quadrat nun 3,xx mal größer ist oder?

Mann muss sich da ausrechnen, wie groß ist die Scalierung vom Blatt auf den Bildschirm ist ... und da spielt dann wieder die größe vom Pixel eine rolle.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Stu42,

ich verstehe wirklich gerade überhaupt nicht was du willst, oder wo dein Problem liegt.

herbivore

PS: Und warum verwendest du bei Zeichnen nicht einfach GraphicsUnit.Milimeter?

S
Stu42 Themenstarter:in
506 Beiträge seit 2006
vor 16 Jahren

also, GraphicsUnit.Milimeter nehme ich fürs Drucken. Aber wenn ich das für Zeichnen auf dem Bildschirm nehme, dann wird ja alles Scaliert, also die LinienDicke etc...

Wenn ich dann z.B. eine Linie im DashStyle zeichne will, dann wird mit GraphicsUnit.Milimeter die Line dicker, und die Striche länger. Wenn ich die Width dann zurück auf 0.1f mm setze, wird die Linie zwar wieder 1 Pixel groß, aber die "Dashes" bleiben länger.... und das sieht das hässlich aus.

Bis jetzt habe ich es so gemacht, das ich halt ganz normal über den Dreisatz meine Grafiken auf den Bildschirm skaliert habe.

Also mit dem Faktor: 600 / 210.

Funktioniert auch wunderbar!

Nun möchte ich aber eine Schrift skalieren!
Also mache ich : FontSize *= 600 / 210

Aber das ist quatsch..... denn 600 / 210 ist gerundet 3 .... und die Schrift ist auf dem Bildschirm NICHT 3 mal größer als auf dem Blatt...

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Stu42,

Aber das ist quatsch..... denn 600 / 210 ist gerundet 3 .... und die Schrift ist auf dem Bildschirm NICHT 3 mal größer als auf dem Blatt...

sondern? Also wie groß ist sie und wie groß soll sie sein?

herbivore

5.657 Beiträge seit 2006
vor 16 Jahren

Hi,

600px / 210mm ist nicht 3, sondern 3 Pixel pro Millimeter.

Eine 10mm große Schrift/Quadrat/Bild etc. auf dem Papier wäre dann 30 Pixel groß.

Weeks of programming can save you hours of planning

S
Stu42 Themenstarter:in
506 Beiträge seit 2006
vor 16 Jahren

wenn die Schrift auf dem Drucker mit 12 Punkt gedruckt wird, dann wird sie auf den Bildschirm doch nicht mit dem Transformationsfaktor (bei und 3) von Pixel in MM skaliert.

Sondern sie muss mit dem Faktor von Seitengröße zu Bildschirmausgabe in MM skaliert werden.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Stu42,

also wenn du alle Koordinaten mit dem Faktor 3 umrechnest, sehe ich keinen Grund, dass bei der Font-Größe nicht zu tun.

herbivore

S
Stu42 Themenstarter:in
506 Beiträge seit 2006
vor 16 Jahren

ja hab ich am anfang auch gedacht... aber es kommt nicht hin....

Eine schrift, die auf dem Drucker mit 12 punkt gedruckt wird, ist auf dem Bildschirm doch nicht 3*12 (36) punkt groß....

Sondern mit dem Faktor:
(VirtualPaperSize.Width (in Pixel) / DPI * 25.4f) / PaperSize.Width (in mm)

600 / 210 ist doch nur der Umrechnugsfaktor für die koordinen von Pixel in MM.
Und die einheit der Schriftgröße ist doch Punkt.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Stu42,

ein Punkt sind 1/72". Wenn du also 12 Punkt hast, rechnest du das in Millimeter um und das (mit dem Faktor 3) in Pixel und gibst beim Erzeugen des Fonts diesen Wert zusammen mit der GraphicsUnit.Pixel an.

DPI spielt dabei keine Rolle, bzw. ergibt sich indirekt aus deinem normalen Umrechungsfaktor von hier 3.

herbivore

5.657 Beiträge seit 2006
vor 16 Jahren

Eine schrift, die auf dem Drucker mit 12 punkt gedruckt wird, ist auf dem Bildschirm doch nicht 3*12 (36) punkt groß....

Bisher ging es doch um die Umrechnung von mm in Pixel?

600 / 210 ist doch nur der Umrechnugsfaktor für die koordinen von Pixel in MM.

Genau andersherum.

Weeks of programming can save you hours of planning

S
Stu42 Themenstarter:in
506 Beiträge seit 2006
vor 16 Jahren

Auf dem Drucker wird die 12 Punkt schrift aber in MM gedruckt...

Dennoch klingt das was herbivore sagte logisch, das ich den font in Pixel erzeuge.

Aber es funktioniert nicht. Der Font auf 36 ist mit "GraficUnit.Pixel" genau so groß ohne "GraficUnit.Pixel ".

@MrSparkle

Es geht um die Skalierung Von MM auf Pixel...

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Stu42,

naja, 36 kommt da ja gar nicht raus, weil ja noch die Umrechnung von Punkt in Millimeter dazu kommt.

Wenn GraficUnit.Pixel es nichts bringt, dann musst du noch einen Faktor einbauen, der x Punkt so umrechnet, dass die Schrift x Pixel groß ist. Den kann man einfach dadurch ermitteln, dass man schaut, wie viel Pixel die Schrift groß sein soll im Vergleich dazu, wie groß sie tatsächlich ist.

herbivore

S
Stu42 Themenstarter:in
506 Beiträge seit 2006
vor 16 Jahren

den Faktor, kann ich mir doch auch aus der DPI erreichnen oder?

Ich hab das ja mittlerweile schon gemacht.

Der Faktor vom Blatt Papier auf dem Bildschirm ist ca 0.8. Wenn ich die 12 Punkt dann mit 0.8 mal nehme, dann sieht das für mich richtig aus....

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Stu42,

den Faktor, kann ich mir doch auch aus der DPI erreichnen oder?

unter DPI im Zusammenhang mit Bildschirmausgabe verstehe ich immer den DPI-Wert des Monitors also seine Pixeldichte. Und die spielt hier sicher keine Rolle.

Ich habe genau beschrieben, wie ich es ausrechnen würde.

herbivore