2009-07-27 14 views
4

Ich bin in der Vergangenheit auf this Antwort auf eine ähnliche Frage bei der Konvertierung von WPF Pixel Koordinaten zu Desktops verwiesen worden, aber ich bin mir nicht sicher, ob ich die beteiligten Mathe verstehe.WPF-Pixel auf Desktop-Pixel

Die Antwort von Astonish besagt, dass "Pixel pro WPF-Einheit = ConstantWPFUnit-Größe * DPI überwachen"; und dass "die konstante WPF-Einheitsgröße 1/96 ist."

In meinem Fall habe ich die DPI von einem Grafikobjekt genommen, das aus dem Bitmap-Objekt erstellt wurde (da ich die Eigenschaft nicht finden konnte, von der Astonish sprach), die ich nach einem Screenshot des Desktops erstellt habe, so ich habe:

Graphics g = Graphics.FromImage(bitmap); 
float WpfUnit = (1/96) * g.DpiX; 

da der DPI zurückgegeben wird von der Grafik-96-Objekt ist, bin ich links mit

WpfUnit = (1/96) * 96 = 1 

jedoch WpfUnit kommt aus als 0 unerfindlichen (für mich) Grund. Der einzige Weg, ich sehe dieses Problem zu beheben

if(WpfUnit == 0) WpfUnit = 1; 

zu sagen ist und selbst dann nicht, dass nicht wirklich das Problem zu beheben, da der Höhenwert und Spitzenwerte, wenn sie von der WpfUnit multipliziert, wie in der verknüpften Antwort vorgeschlagen, habe nichts mit ihnen getan abgesehen von mit 1 multipliziert.

Also, zum Schluss, ich bin immer noch stecken auf WPF-Pixel auf Desktop-Pixel zu konvertieren. Jede Hilfe dazu wäre sehr willkommen.

Antwort

2

Wie wäre es mit eingebauten Methoden PointToScreen und PointFromScreen? Oder fehlt mir etwas?

+0

Ich habe diese beiden Methoden angeschaut, aber sie arbeiten mit System.Windows.Point anstelle von System.Drawing.Point, die ich ein Rechteckobjekt erstellen muss :( –

+0

Sie können immer Adaptermuster verwenden, um Wrapper aus einem zu erstellen title to eno Weitere Informationen finden Sie unter de.wikipedia.org/wiki/Adapter_pattern – huseyint

+0

Ich habe wirklich nicht daran gedacht, manuell zwischen den beiden zu konvertieren :( –

6

WpfUnit kommt als Null heraus, weil es Ganzzahlmathematik mit dem 1/96 macht. Deklarieren Sie diese Nummern explizit als Gleitkommazahlen.

Verwandte Themen