Domanda
Sono stato collegato in passato a questo Risposta a una domanda simile sulla conversione delle coordinate dei pixel WPF a quelli desktop, tuttavia non sono sicuro di capire i matematici coinvolti.
La risposta di stupore afferma che "pixel per wpf unità = costantwpfunit size * monitora dpi;" e che "la dimensione dell'unità WPF costante è 1/96".
Nel mio caso, ho preso il DPI da un oggetto grafico che è stato creato dall'oggetto Bitmap (poiché non sono riuscito a trovare la proprietà di cui Astonish ha parlato) che ho creato dopo aver fatto uno screenshot del desktop, quindi ho:
Graphics g = Graphics.FromImage(bitmap);
float WpfUnit = (1 / 96) * g.DpiX;
Dato che il DPI restituito dall'oggetto grafico è 96, mi resta con
WpfUnit = (1 / 96) * 96 = 1
Tuttavia, WPFUNIT sta uscendo come 0 per qualche motivo sconosciuto (per me). L'unico modo in cui posso vedere per risolvere questo è dirlo
if(WpfUnit == 0) WpfUnit = 1;
E anche questo non risolve davvero il problema, poiché il valore di altezza e i valori migliori, se moltiplicati per il WPFUNIT come suggerito nella risposta collegata, non hai fatto nulla a parte il moltiplicato per 1.
Quindi, in conclusione, sono ancora bloccato nella conversione dei pixel WPF in pixel desktop. Qualsiasi aiuto su questo sarebbe molto apprezzato.
Soluzione
Che ne dici di integrato Punta e Schermo di punta metodi? Oppure mi sfugge qualcosa?
Altri suggerimenti
WPFUNIT sta uscendo come zero perché sta facendo matematica intera con 1/96. Dichiara esplicitamente quei numeri come galleggianti.