Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Unterschied .net Funktion Polygon und Win32-Api beim Drucken
derfrecheDachs
myCSharp.de - Member



Dabei seit:
Beiträge: 34

Themenstarter:

Unterschied .net Funktion Polygon und Win32-Api beim Drucken

beantworten | zitieren | melden

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 ?? ?(
private Nachricht | Beiträge des Benutzers
Klaus L.
myCSharp.de - Member



Dabei seit:
Beiträge: 14
Herkunft: Nahe KA

beantworten | zitieren | melden

Zitat von derfrecheDachs
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
private Nachricht | Beiträge des Benutzers
derfrecheDachs
myCSharp.de - Member



Dabei seit:
Beiträge: 34

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers