Laden...

Unterschied .net Funktion Polygon und Win32-Api beim Drucken

Erstellt von derfrecheDachs vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.251 Views
D
derfrecheDachs Themenstarter:in
34 Beiträge seit 2006
vor 16 Jahren
Unterschied .net Funktion Polygon und Win32-Api beim Drucken

Ich benutze normalerweise die **.net-Funktion FillPolygon / drawPolygon ** um ein Grafik Objekt zu zeichnen. Aus Geschwindigkeitsgründen bin ich auf die Win32Api-Funktion Polygon umgestiegen.
Beim Zeichnen auf den Bildschirm funktioniert dies auch , so wie erwartet. Möchte ich aber was ausdrucken, dann erscheint die mit WIn32API-Polygon gezeichnete Grafik ganz klein .
Ich vermute mal , dass dies mit der unterschiedlichen DPI-Auflösung beim Drucken zusammenhängt.
Wie mach ich es jetzt aber, dass die Grafik wieder wie gewohnt gleich gross erscheint, wie alle anderen. Was muss ich da an Parametern setzen bzw. der Win32APi-Funktion Polygon mitgeben ?? ?(

K
13 Beiträge seit 2008
vor 16 Jahren

Was muss ich da an Parametern setzen bzw. der Win32APi-Funktion Polygon mitgeben ?? ?(

Du mußt die Skalierung selber machen. D.h. du mußt jeden Polygonpunkt in x- und y-Richtung mit einem passenden Faktor multiplizieren und ihm ggf. auch noch einen Offset geben.

Du kannst zwar auch SetWorldTransform (API) einsetzten, aber es ist einfacher wenn man die Umrechnung selber macht. Hier findest du ein Beispiel:
http://www.activevb.de/cgi-bin/tippupload/preview.pl?id=76&sid=0
Das solltest du ohne weiteres nach C# übersetzen können. Die Skalierung machst du mit den Funktionen xxc und yyc. Im Beispiel ist zwar kein Polygon drin, aber die Methode sollte klar sein: Aus der Größe des Bildes errechnet man den Skalierungsfaktor (xfact und yFact) und wendet diesen dann auf jeden Polygonpunkt an.

Klaus

D
derfrecheDachs Themenstarter:in
34 Beiträge seit 2006
vor 16 Jahren

Hallo Klaus,

eine Skalierung mache ich schon für jeden Punkt mittels einer 4*4-Matrix, also so wie es normalerweise mathematisch richtig gemacht wird. Die Skalierung in .net muss man ja auch selber machen. Trotzdem verhalten sich die Win32Api-Funktionen anders als die normalen .net-Funktionen.
Ich hole mir am Anfang mit e.Graphics den jeweiligen Devicecontext, berechne die Faktoren in X/Y-Richtung und vor dem Zeichnen wende ich die Matrix auf alle Koordinaten an. Ich zeichne dann unabhängig, ob das jetzt ein Formular ist oder beim Printer eben ein printdocument, auf diesen. Bei den .Net-Zeichenfunktionen funktioniert das auch alles, nur eben die Win32-Api-Funktionen werden verkleinert dargestellt. So als ob die die falschen Einstellungen benutzen würden.

Für Win32 hole ich mittels dc = oberflaeche.GetHdc(); mir den DeviceHandle aus der Graphics-Komponte raus.

Ich habe jetzt was gelesen, dass die Printersettings bestimmte Methoden anbieten, um mit Win32Api zu arbeiten. Leider find ich kein entsprechendes Beispiel dazu.