Frage
Ich bin in der Vergangenheit miteinander verbunden mit Dies Antwort auf eine ähnliche Frage zum Konvertieren von WPF -Pixelkoordinaten in Desktop -Desktops. Ich bin mir jedoch nicht sicher, ob ich die beteiligten Mathematik verstehe.
Astonish 'Antwort besagt, dass "Pixel pro WPF -Einheit = constantwPfUnit -Größe * DPI überwachen;" und dass "die konstante WPF -Einheitsgröße 1/96 beträgt".
In meinem Fall habe ich den DPI aus einem Grafikobjekt genommen, das aus dem Bitmap -Objekt erstellt wurde (da ich die Eigenschaft nicht fanden konnte, von der ich sprach), von dem ich nach einem Screenshot des Desktops erstellt habe, also habe ich:
Graphics g = Graphics.FromImage(bitmap);
float WpfUnit = (1 / 96) * g.DpiX;
Da die DPI, die aus dem Grafikobjekt zurückgegeben wird
WpfUnit = (1 / 96) * 96 = 1
WPFunit wird jedoch für einen unbekannten (für mich) Grund als 0 veröffentlicht. Der einzige Weg, den ich sehen kann, um dies zu beheben, besteht darin, dies zu sagen
if(WpfUnit == 0) WpfUnit = 1;
Und selbst das behebt das Problem nicht wirklich, da der Höhenwert und die Top -Werte, wenn sie mit dem WPFunit multipliziert werden, wie in der verknüpften Antwort vorgeschlagen, ihnen nichts angetan haben, abgesehen davon, dass sie mit 1 multipliziert werden.
Zusammenfassend bin ich immer noch an der Konvertierung von WPF -Pixeln in Desktop -Pixel. Jede Hilfe dazu wäre sehr geschätzt.
Lösung
Wie wäre es mit integriert PointToscreen und Point Fromscreen Methoden? Oder vermisst ich etwas?
Andere Tipps
WPFunit kommt als Null heraus, weil es mit dem 1/96 ganzzahlige Mathematik macht. Erklären Sie diese Zahlen explizit als Schwimmer.