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?

Foi útil?

Solução

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.)

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