Converter Pixels de Pontos
Pergunta
Eu tenho uma necessidade para converter Pixels para Pontos em C #. Eu vi algumas explicações complicadas sobre o tema, mas parece que não consegue localizar uma fórmula simples. Vamos supor que um 96dpi padrão, como faço para Calulate esta conversão?
Solução
Há 72 pontos por polegada ; se é suficiente para assumir 96 pixels por polegada, a fórmula é bastante simples:
= pontos pixels * 72/96
Existe uma maneira de obter os pixels configurados por polegada da tela no Windows usando GetDeviceCaps
. Microsoft tem um guia chamado "Desenvolver DPI-Aware Applications" , procure a seção "Criação de DPI-Aware Fontes".
O W3C definiu o px
medida de pixel como exatamente 1 / 96th de 1 pol independentemente da resolução real da tela, de modo que a fórmula acima deve ser bom para todo o trabalho web.
Outras dicas
Tente isto se suas mentiras código em um formulário:
Graphics g = this.CreateGraphics();
points = pixels * 72 / g.DpiX;
g.Dispose();
Assumindo 96dpi é uma enorme erro. Mesmo se a suposição é certo, há também uma opção para fontes escala. Assim, um conjunto de fontes para 10pts pode realmente ser mostrado como se fosse 12.5pt (125%).
A partir da dada:
- Há 72 pontos em uma polegada (que é o que um ponto é, 1/72 de polegada)
- em um conjunto de sistema para 150dpi, existem 150 pixels por polegada.
- 1 em 72pt = = 150 pixels (por definição 150dpi)
Se você quiser encontrar pontos (pt) com base em pixels (px):
72 pt x pt
------ = ----- (1) for 150dpi system
150 px y px
Reorganizando:
x = (y/150) * 72 (2) for 150dpi system
forma:
points = (pixels / 150) * 72 (3) for 150dpi system
WPF converte pontos de pixels com o System.Windows.FontSizeConverter. O FontSizeConverter usa o System.Windows.LengthConverter. O LengthConverter usa o fator 1,333333333333333333 converter de pontos (p) para pixels (x): x = p * 1,3333333333333333
System.Drawing.Graphics tem propriedades DPix e DpiY. DpiX é pixels por polegada na horizontal. DpiY é pixels por polegada verticalmente. Use os converter de pontos (72 pontos por polegada) para pixels.
Ex: 14 pontos horizontais = (14 *) / DPix 72 pixels
Com certeza toda esta questão deve ser:
"Como posso obter o PPI horizontal e vertical (pixels por polegada) do monitor?"
Existem 72 pontos em uma polegada (por definição, um "ponto" é definido como 1/72 de polegada, de igual modo um "Pica" é definido como 1/72 de um pé). Com estes dois bits de informação que você pode converter de px para a PT e para trás com muita facilidade.
Na verdade ele deve ser
points = pixels * 96 / 72
Pontos = (pixels / 96) * 72 em um XP standard / Vista / 7 máquina (padrões de fábrica)
Pontos = (pixels / 72) * 72 em um Mac padrão rodando OSX (Os padrões de fábrica)
Windows é executado como padrão em 96dpi (visualização) Macs executado como padrão em 72 dpi (visualização)
72 POSTSCRIPT Pontos = 1 polegada 12 POSTSCRIPT Pontos = 1 POSTSCRIPT Pica 6 POSTSCRIPT picas = 72 Pontos = 1 polegada
1 ponto = 1/72 polegadas = 25.4/72 mm = 0,3527 milímetros
DPI = pontos por polegada PPI = pixels por polegada LPI = linhas por polegada
Mais informações se usar em como medir
16px = 1em (padrão para texto normal) 8em = 16px * 8 Pixels / 16 = em
Isso funciona:
int pixels = (int)((dp) * Resources.System.DisplayMetrics.Density + 0.5f);
linhas de altura convertidas em pontos e pixels (minha própria fórmula). Aqui está um exemplo com a introdução manual de 213.67 pontos no campo 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.
(Por 0,45? Eu não sei, mas ele funciona.)