Por que o texto aparece diferente quando desenhados com GDIPlus versus GDI

O suporte para o Windows XP terminou

A Microsoft terminou o suporte para o Windows XP em 8 de abril de 2014. Esta alteração afetou as suas atualizações de software e opções de segurança. Saiba o que isto significa para você e como permanecer protegido.

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 307208
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sumário
Layout de texto com GDIPlus é independente de resolução. O efeito desse recurso se torna aparente quando GDIPlus layout de texto é comparada com o layout de texto GDI dependente de resolução.

No processamento ajustados grade (o padrão), dicas de fonte normalmente altera a largura de glifos. Quando uma seqüência de glifos todos aumentam significativamente largura, GDIPlus pode ser necessário aumentar o texto permaneça independente de resolução. Em casos extremos (como uma seqüência longa de glifos de negrito minúscula "l" na fonte de Microsoft Sans Serif de 8 pontos em uma exibição 96 pontos por polegada [PPP]), o espaço entre algumas letras pode desaparecer totalmente.

Formulários criados com o layout de texto GDIPlus aparecem iguais em todas as resoluções e quando impresso.
Mais Informações

Independente de resolução de layout

As funções DrawString e MeasureString na interface de programação de aplicativo (API) do GDIPlus dispor texto independente da resolução do dispositivo; portanto, um parágrafo de texto tem o mesmo número de linhas, não importa qual dispositivo é exibido por. Há muitos outros benefícios além disso, incluindo o seguinte:
  • Se um campo em um formulário é dimensionado para caber alguns textos estáticos no computador de um desenvolvedor, ela irá caber texto em todos os computadores que o aplicativo pode ser executada, independentemente de configurações de acessibilidade ou resolução de tela.
  • Quando o formulário é impresso, ele será ordene o mesmo como ele aparece na tela.
  • Um formulário registrado em um metarquivo retém seu layout.
Considere o designer de formulários. Uma caixa é definida no formulário de texto--um título, talvez. Digite o título e ajustar a caixa para ajustá-los. Infelizmente, ao contrário das linhas, o texto não se adapta linearmente com a resolução, para que a caixa caiba corretamente apenas com a resolução (designer) que estava trabalhando.

Para objetos gráficos, como linhas e imagens, uma resolução diferente de dispositivo significa um fator de escala diferentes em tempo de exibição. Uma linha lógica seria 100 pixels longa em uma exibição 96 dpi é desenhada 125 pixels longo em uma exibição 120 dpi e 625 pixels longo em uma impressora de 600 PPP.

Para texto, a altura da fonte é dimensionada apropriadamente para a resolução do dispositivo: uma fonte que é desenhadas 20 pixels altos em uma tela 96 dpi é processada 25 pixels de altura em uma tela 125 PPP e 125 pixels de altura em uma impressora de 600 PPP. No entanto, a largura de glifos individuais será dimensionado apenas aproximadamente com a altura. A largura exata depende também instruções dicas que foram incluídas na fonte para ajustar forma do glifo (ajuste de grade) para legibilidade.

TrueType dicas, instalação de grade e o efeito desproporcional no glifo largura

Grade de ajuste--a aplicação de dicas de TrueType--é o processo de ajustar a posição de pixels em um glifo processado para tornar o glifo facilmente legível em tamanhos de tela. As técnicas de hinting incluem o alinhamento de radicais de glifo em pixels todo e que recursos semelhantes de um glifo são afetados igualmente seguro. Designers de fonte passam muitas horas dicas cada glifo.

Por exemplo, considere as letras "s", "e", "w" e "l" da fonte Times New Roman, processada com 8 pontos em várias resoluções, usar o GDI do ajuste de grade padrão.

Nos exemplos a seguir, cada marca e a caixa delimitadora é desenhado em alta resolução em cinza e em seguida, os pixels reais que ele representa em um determinado tamanho e PPP são desenhados na parte superior como círculos em preto. 96 dpi é a mais amplamente usados resolução de vídeo, também conhecido como "fontes pequenas" na caixa de diálogo Configurações de vídeo no painel de controle. O caso de 120 dpi corresponde à configuração de exibição comuns do "fontes grandes". 150 dpi está se tornando um computador portátil comuns resolução da tela LCD e 600 PPP é uma solução de low-end atual para uma impressora a laser.

Observe como, em 96 dpi (resolução de tela padrão), há muito poucos pixels de um glifo de 8 pontos. De 8 pontos 96 dpi minúsculas "s", por exemplo, tem quase nenhum do caractere do glifo é pretende representa.

Latin Letter

A primeira figura abaixo cada glifo mostra a resolução real de glifo desenhada. A segunda figura representa a diferença entre a largura projetada do glifo e a largura de desenhada real como uma porcentagem positiva ou negativa. A figura a terceira representa a diferença como fracionários pixels na resolução de exibição real.

No exemplo a seguir, o glifo mais à esquerda, um ponto de 8 96 dpi minúsculas "e" é cerca de 11 % ou.61 pixels mais estreitas do que sua forma ideal após o ajuste de grade.

Latin Letter

Se houvesse sem grade ajuste, esperamos seria que a única diferença entre a largura criada e exibida para refletir o efeito de arredondamento para o pixel mais próximo. Nesse caso nunca veríamos uma diferença de largura de mais de metade de um pixel. Na resolução mais alta (2400 PPP), isso realmente é o caso, a maior diferença visto aqui amounting para 0.37 pixels.

No entanto, em resoluções inferiores, o efeito de ajuste de grade pode exceder ou swamp simples de arredondamento. Considere a letra "w", no qual o efeito de dicas é particularmente extremo. Por outro lado, o letra "l" é estreita e composto de apenas um tronco e, portanto, mostra efeitos leve de dicas.

Latin Letter
Latin Letter

Como GDIPlus compensa para instalação de grade

Quando a grade instalação gera Glyphs que são mais estreitas do que projetado

O pior caso nos exemplos anteriores é de 96 dpi minúsculas "w". "w" é um glifo particularmente difícil a dica bem: os radicais devem aparecer simétricos, uniformemente espaçados e de espessura igual. Cuidado hinting resulta em uma boa aparência, mas o glifo hinted é mais 2 pixels mais estreitas do que sua largura de design. Uma seqüência de caracteres composta apenas de 8 pontos 96 dpi "w" será 23 % menor quando grade ajustados.

Quando GDIPlus exibe uma linha de grade ajustado glifos que são menores que sua largura de design, ele segue estas regras gerais:
  • A linha é permitida contrato por backup à largura do quadrado em sem qualquer alteração de espaçamento de glifo. (Consulte a seção "Referências" deste artigo para obter mais informações sobre o quadrado em e seu uso como uma unidade de medida tipográfica.)
  • Restante contraction é formado por quando você aumenta a largura de espaços entre palavras, a um máximo de dobra.
  • Restante contraction é formado por introduzindo pixels em branco entre glifos.
O exemplo a seguir mostra como a GDI e GDIPlus exibir a seqüência "wwwww wwwww wwwww wwwww wwwww" na fonte Times New Roman de 8 pontos em 96 PPP com grade de ajuste.

Exibição GDI (dependente de resolução)String of Latin Letter
Exibir GDIPlus (independente de resolução)String of Latin Letter

Este exemplo mostra como GDIPlus usa as larguras de design para ordenar a seqüência de caracteres e portanto medidas a seqüência inteira mais GDI faz. GDIPlus permite que a seqüência para parar curto da extremidade mais distante, 1 em e coloca a expansão restante nos espaços.

O exemplo a seguir mostra as mesmas cadeias de caracteres com espaços removidos. GDIPlus não pode usar os espaços para compensar contrações causadas por ajuste de grade e, em vez disso, insere um pixel extra entre alguns os glifos.

Exibição GDI (dependente de resolução)String of Latin Letter
Exibir GDIPlus (independente de resolução)String of Latin Letter

Quando a grade instalação gera Glyphs que são mais largas que projetado

Agora, considere exemplos a seguir, que usar a fonte Microsoft Sans Serif negrito em um tamanho de 8 pontos. Microsoft Sans Serif é a fonte de interface de usuário padrão para sistemas operacionais Microsoft Windows 2000 e posterior.

Latin Letter
Latin Letter
Latin Letter
Latin Letter

Nesse caso, a maioria dos glifos são mais larga do que foram criados quando desenhada no PPP 96 e 120. Embora muitas não são muito maiores, existem alguns casos particularmente difícil.

Considere que uma seqüência de caracteres em 96 dpi composta somente uma minúscula "l". Embora cada "l" seja maior do que sua largura de design somente.16 pixels, uma seqüência de caracteres apenas 7 é suficiente para exceder a largura de design da execução por um pixel inteiro. Nesse caso, você deve compactar a seqüência de caracteres de 1 pixel. Infelizmente, a forma do minúsculo "l" comportamento mal quando um par deles é sobreposto por 1 pixel: como só é 1 coluna de pixel em branco, o processo de sobreposição faz com que os glifos adjacentes formar um sólido.

O exemplo a seguir mostra uma seqüência de caracteres de minúscula "l" 9 exibidos pelo GDI e pelo GDIPlus:

Exibição GDI (dependente de resolução)String of Latin Letter
Exibir GDIPlus (independente de resolução)String of Latin Letter

Observe como s em GDIPlus as duas últimas "l" aparecem tocar.

Você também pode ver neste exemplo que GDIPlus adiciona uma pequena quantidade (em 1/6) cada final de cada seqüência de caracteres exibida. Este em 1/6 permite glifos com overhanging termina e também fornece GDIPlus uma pequena quantidade de leeway para ajudar com expansão de ajuste de grade.

Um exemplo de um glifo com overhangs é o itálico f da fonte Times New Roman. O recurso superior à direita do glifo overhangs o glifo à direita (do glifo vizinho à direita), enquanto a líderes estende o recurso mais inferior em vizinho anterior. Porque o overhang e underhang intrometer no espaço de um glifo vizinho, eles não contribuem para a largura de glifo f . Portanto, o overhang processa além da largura da seqüência de caracteres quando o caractere está localizado no final de uma seqüência de caracteres. Em 1/6 fornece o espaço adicional no qual os overhangs podem ser processados.

Como exibir texto adjacentes

Talvez você queira exibir duas seqüências lado a lado para que eles aparecem como uma seqüência de caracteres. Você pode querer fazer isso, se você estiver escrevendo um editor ou está exibindo o texto com uma alteração de formatação dentro do parágrafo.

Aviso : linhas interno do texto com várias chamadas DrawString conseguem inerentemente exibir texto internacional geral. Em particular, em árabe, hebraico, Farsi e outros idiomas escritos da direita para a esquerda, seqüências de caracteres de avanço geralmente da direita para a esquerda, com localizados ordem reversão em torno de números e ao redor de frases ocidentais. drawString manipula esse cenário dentro de uma saída, usando o comportamento de bi-direcional definido pelo Unicode. As regras são complexas. Para obter mais informações, consulte "O Unicode Standard versão 3.0," seção 3.12.

A ação padrão de DrawString funciona contra você quando você exibir execuções adjacentes: primeiro, o objeto StringFormat padrão adiciona um travessão extra 1/6 em cada extremidade de cada saída; em segundo lugar, quando a grade ajustados larguras são menor do que criado, é permitida a cadeia de caracteres processada ao contrato de seu tamanho medido por até um travessão.

Para evitar esses problemas, faça o seguinte:
  • Sempre passe MeasureString e DrawString um objeto StringFormat baseado no StringFormat tipográfica (GenericTypographic).

    - e -

  • Defina TextRenderingHint elementos gráficos como TextRenderingHintAntiAlias .
Essas medidas desativar o em extra 1/6 adicionado às extremidades de execução, evitar problemas de grade, ajustar usando suavização de serrilhado e posicionamento de glifo sub-pixel e resultam em texto perfeitamente escalonável. O resultado pode ser uma pouco cinza em tamanhos menores. Para compensar isso, use a função SetTextContrast para escurecer texto anti-alias.

As tabelas a seguir comparam GDI, GDIPlus GridFitted e GDIPlus anti-alias texto para os exemplos anteriores.

formatação com o Spaces
Exibição GDI (dependente de resolução)String of Latin Letter
Exibição de grade ajustado GDIPlus (independente de resolução)String of Latin Letter
Exibição de anti-alias GDIPlus (independente de resolução)String of Latin Letter

pior caso estreito
Exibição GDI (dependente de resolução)String of Latin Letter
Exibição de grade ajustado GDIPlus (independente de resolução)String of Latin Letter
Exibição de anti-alias GDIPlus (independente de resolução)String of Latin Letter

pior caso Wide
Exibição GDI (dependente de resolução)String of Latin Letter
GDIPlus ajustados grade exibir (independente de resolução)String of Latin Letter
Exibição de anti-alias GDIPlus (independente de resolução)String of Latin Letter

Embora texto anti-alias pode examinar cinza uma pouco a tamanhos muito pequenos (isso é 8 pontos), ela mostra a forma dos glifos com uma precisão muito mais do que texto grade ajustado e não apresenta o ajuste de posição de glifo (descrito anteriormente) para ajuste de grade.

Quando usar GDIPlus

Uma chamada DrawString se destina a exibir toda linhas ou parágrafos em um único formato. É ótimo para interfaces do usuário, como formulários, onde a escalabilidade garante a um layout independentes de resolução de vídeo. Quando você trabalha com texto multiformat exibindo execuções individuais, siga um destes procedimentos:
  • Use DrawString com o formato de seqüência de caracteres tipográficas e TextRenderingHintAntiAlias , conforme discutido anteriormente neste artigo.

    - ou -

  • Use do GDI ExtTextOut ou UniScribe (o Unicode Script Processor).
Referências

Glossário

ponto:
Uma medida do tamanho do tipo nos Estados Unidos e Inglaterra. Uma polegada (2,54 centímetros) é de aproximadamente 72.27 pontos. Normalmente usado em ciência da computação, como 1/72 de polegada.

em:
Uma fonte específicas unidade de medida igual ao tamanho de em quadrado da fonte.

em quadrado:
Na grade de coordenadas de nocional-quadrado no qual glifos de uma fonte TrueType são projetados.

Leitura adicional

Para obter mais informações sobre o padrão Unicode, consulte o seguinte: O Unicode Consortium. O padrão Unicode, versão 3.0. Leitura, MA, Addison-Wesley, 2000. ISBN 0-201-61633-5.

Na Internet: Para obter mais informações sobre a especificação OpenType, visite o seguinte site da Microsoft: Também disponível no CD do Microsoft Developer Network Library em especificações.

Para obter mais informações sobre o quadrado em , dicas e o processo de ajuste de grade, consulte o apêndice "TrueType conceitos básicos" na especificação OpenType acima ou navegue para o seguinte site da Microsoft: Para obter uma introdução para UniScribe, o Unicode Script Processor, consulte o seguinte:
suporte a layout de texto multilíngüe e scripts complexos com o Windows NT 5.0 , por f. Avery Camargo, David C. Brown, David Meltzer de M., Microsoft Systems Journal, novembro de 1998.
Gdiplus extras espaço incompatibilidade palavra editor Graphics::DrawString Graphics::MeasureString

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 307208 - Última Revisão: 12/06/2015 05:19:04 - Revisão: 2.2

Microsoft GDI+ 1.0, Microsoft Windows XP Professional, the operating system: Microsoft Windows XP 64-Bit Edition

  • kbnosurvey kbarchive kbmt kbdswgdi2003swept kbgraphxlinkcritical kbinfo KB307208 KbMtpt
Comentários