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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top