Converter os Pixels em pontos
11 answers
Existem 72 pontos por polegada ; Se for suficiente assumir 96 pixels por polegada, a fórmula é bastante simples:
Pontos = pixels * 72 / 96
Existe uma forma de obter os pixels configurados por polegada do seu ecrã nas janelas, usando GetDeviceCaps
. A Microsoft tem um guia chamado "desenvolvimento de aplicações dpi-Aware" , procure a secção "criação de fontes dpi-Aware".
O W3C definiu a medição dos pixels px
como exactamente 1 / 96 de 1in independentemente da Resolução real do seu ecrã, por isso a fórmula acima deve ser boa para todo o trabalho na web.
Tente isto se o seu código está num formulário:
Graphics g = this.CreateGraphics();
points = pixels * 72 / g.DpiX;
g.Dispose();
Assumindo que o 96dpi é um erroenorme . Mesmo que a suposição esteja certa, há também uma opção para escalar fontes. Então um tipo de letra definido para 10pts pode realmente ser mostrado como se fosse 12,5 pt (125%).
Começando com os dados:
- Há 72 pontos numa polegada (é isso que um ponto é, 1/72 de uma polegada)
Num sistema definido para 150dpi, há 150 pixels por polegada.
- 1 em = 72pt = 150px (para configuração de 150ppp)
Se quiser encontrar pontos (pt) com base em pixels (px):
72 pt x pt
------ = ----- (1) for 150dpi system
150 px y px
Reorganizar:
x = (y/150) * 72 (2) for 150dpi system
Então:
points = (pixels / 150) * 72 (3) for 150dpi system
WPF converte pontos em pixels com o sistema.Janela.FontSizeConverter. O FontSizeConverter usa o sistema.Janela.LengthConverter. O LengthConverter usa o fator 1.3333333333333333 para converter de pontos (p) para pixels (x): x = p * 1.33333333333333
Sistema.Desenho.Os gráficos têm propriedades DpiX e PPP. DpiX é pixels por polegada horizontalmente. PPP é pixels por polegada verticalmente. Use aqueles para converter de pontos (72 pontos por polegada) para pixels.
Ex: 14 pontos horizontais = (14 * DpiX) / 72 pixels
Há 72 pontos em uma polegada (por definição, um "ponto" é definido como 1/72 de uma polegada, da mesma forma, um "pica" é definido como 1/72 de um pé). Com estes dois bits de informação você pode converter de px para pt e voltar muito facilmente.
Na verdade deve ser
points = pixels * 96 / 72
Points = (pixels / 96) * 72 on a standard XP / Vista / 7 machine (factory defaults)
Points = (pixels / 72) * 72 on a standard Mac running OSX (Factory defaults)
O Windows funciona por omissão a 96dpi (display) O Macs é executado por omissão a 72 PPP (display)
72 pontos POSTSCRIPT = 1 polegada 12 pontos POSTSCRIPT = 1 Pica POSTSCRIPT 6 Picas POSTSCRIPT = 72 pontos = 1 polegada1 ponto = 1 72 72 polegadas = 25, 4 72 72 mm = 0, 3527 mm
PPP = pontos por polegada PPI = Pixels Por Polegada LPI = linhas por polegada
Mais informação se usar em como medida
16px = 1em (por omissão para o texto normal) 8em = 16px * 8 Pixels / 16 = em
Isto funciona:
int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);
Linhas de altura convertidas em pontos e pixels (a minha própria fórmula). Aqui está um exemplo com uma entrada manual de 213.67 pontos no campo de Altura Da Linha:
213.67 Manual Entry
0.45 Add 0.45
214.12 Subtotal
213.75 Round to a multiple of 0.75
213.00 Subtract 0.75 provides manual entry converted by Excel
284.00 Divide by 0.75 gives the number of pixels of height
Aqui a entrada manual de 213,67 pontos dá 284 pixels.Aqui a entrada manual de 213.68 pontos dá 285 pixels.
(porquê 0, 45? Não sei, mas funciona.)