Pergunta

Eu estive vinculado no passado a isto Resposta a uma pergunta semelhante sobre a conversão das coordenadas do WPF Pixel para a área de trabalho, no entanto, não tenho certeza se entendi as matemática envolvidas.

A resposta da SurToish afirma que "pixels por unidade wpf = tamanho constantwpfunit * monitor dpi;" e que "o tamanho da unidade WPF constante é 1/96".

No meu caso, peguei o DPI de um objeto gráfico que foi criado a partir do objeto Bitmap (como não consegui encontrar a propriedade de que o espanto falou) que eu criei depois de tirar uma captura de tela da área de trabalho, então eu tenho:

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

Dado que o DPI que está sendo devolvido do objeto gráfico é 96, fiquei com

WpfUnit = (1 / 96) * 96 = 1

No entanto, o WPFunit está saindo como 0 por algum motivo desconhecido (para mim). A única maneira que posso ver para consertar isso é dizer

if(WpfUnit == 0) WpfUnit = 1;

E mesmo isso realmente não resolve o problema, pois o valor da altura e os valores superiores, quando multiplicados pelo WPFunit, conforme sugerido na resposta vinculada, não fizeram nada a eles além de serem multiplicados por 1.

Então, em conclusão, ainda estou preso na conversão de pixels WPF em pixels de mesa. Qualquer ajuda neste assunto seria altamente apreciada.

Foi útil?

Solução

Que tal embutido Pointtoscreen e PointFromScreen métodos? Ou eu estou esquecendo de alguma coisa?

Outras dicas

O WPFUnit está saindo como zero porque está fazendo matemática inteira com o 1/96. Declarar explicitamente esses números como carros alegóricos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top