ID do artigo: 243285 - Última revisão: segunda-feira, 12 de fevereiro de 2007 - Revisão: 1.5 Como desenhar contornos de glifo TrueType
SumárioA função de API do Win32 GetGlyphOutline pode retornar dados de estrutura de tópicos de glifo nativo a partir de uma fonte TrueType. Para desenhar um contorno de glifo TrueType, os dados devem ser convertidos de sua definição B-spline nativa como uma seqüência de definições de linha de Bézier. Em seguida, a função de API do Win32 PolyBezier pode ser usada para desenhar o contorno. Mais InformaçõesA função GetGlyphOutline o Interface(API) de programação de aplicativo Win32 pode recuperar um contorno TrueType. A opção de formato GGO_NATIVE preenche um buffer com curvas de B-spline quadrática para uma estrutura de tópicos de TrueType. B-splines quadráticas são usados por TrueType para descrever a estrutura de glifo em um arquivo de fonte TrueType. Para desenhar curvas esses tópicos um pode implementar uma função de desenho B-spline ou use a função PolyBezier da API Win32. Curvas de B-spline quadráticas são uma classe de curvas paramétricas que definem o caminho de vários segmentos de curva por meio de alguns pontos de controle. Uma curva quadrática é uma segunda curva paramétrica de ordem. Não há nenhuma função na API para desenhar uma spline quadrática diretamente, mas se o quadrática é convertida em um cúbicos pode ser obtido com a API do Win32 funciona para desenhar uma curva de Bezier; chamado PolyBezier . B-spline quadráticas curvas em determinado e paramétricas curvas em geral são um tópico well-researched de elementos gráficos em ciência da computação. Eles também podem ser bem complexos. Algoritmos foram publicados em vários textos que podem ser usados para implementar uma função para desenhar uma spline quadrática, mas que descrevem como um algoritmo está além do escopo deste artigo. A função PolyBezier pode desenhar uma spline quadrática porque uma curva de Bezier é uma curva paramétrica cúbicos ou terceira ordem. Como um spline quadrática é uma segunda equação de ordem, pode ser expresso em termos da equação cúbicos de ordem superior. Embora uma equação para expressar uma quadrática como um cúbicos for fornecida no código de exemplo, sua derivação não é discutida neste artigo. O código de exemplo neste artigo é uma demonstração de como analisar um buffer de glifo GGO_NATIVE retornado pela função GetGlyphOutline . O buffer retornado pelo sinalizador de formato GGO_NATIVE segue a estrutura TTPOLYGONHEADER . A estrutura TTPOLYGONHEADER e os dados imediatamente a seguir constituem um contorno de um glifo de TrueType. Uma delimitação é um caminho completo de curvas que está implicitamente fechado se não for retornado explicitamente dessa maneira. Consulte o SDK de plataforma para documentação sobre as estruturas TTPOLYGONHEADER e TTPOLYCURVE . Uma delimitação de glifo consiste em vários segmentos de curva representados por TTPOLYCURVE estruturas. Em uma delimitação TTPOLYGONHEADER é seguido por um ou mais estruturas TTPOLYCURVE e dados de ponto de coordenada. O membro pfxStart fornece o ponto de coordenada inicial da delimitação. A contagem de registros de curva que siga TTPOLYGONHEADER é fornecida pelo membro cb . O ponto inicial é em relação à origem o glifo. A origem de um glifo é o canto inferior esquerdo do caractere na linha de base do caractere. Cada registro de curva TTPOLYCURVE (um segmento de curva) consiste em ou pontos de controle de B-spline quadrática pontos Polyline simples. A contagem de pontos é fornecida pelo membro cpfx TTPOLYCURVE . O tipo de curva de spline ou polilinha é fornecido pelo membro wType . A matriz de pontos de coordenadas imediatamente seguem a estrutura. O ponto inicial da curva é fornecido pelo membro apfx . Como um glifo pode conter mais de uma delimitação, o buffer contém um ou mais grupos de TTPOLYGONHEADER estruturas e os dados. Delimitações subseqüentes são compactadas imediatamente após a anterior no buffer nativo. A delimitação próxima começa com um TTPOLYGONHEADER no próximo byte além do último ponto do Registro curva anterior. Este código de exemplo desenha o contorno de um glifo TrueType ao analisar o buffer GGO_NATIVE para criar uma lista de segmentos de linha de Bezier cada delimitação de formulário. A lista de segmentos de linha de Bezier é desenhada em seguida, usando PolyBezier . O código que analisa o buffer está na função DrawT2Outline . A primeira etapa para criar uma lista de linhas de Bezier é determinar o tamanho do buffer para a lista. Quatro pontos definem linhas de Bézier. A função PolyBezier interpreta uma matriz de pontos como sendo uma linha contínua de segmentos de Bezier onde o início da próxima linha é coincidentes com o ponto de extremidade da linha anterior. Assim, apenas três pontos são necessárias para descrever um segmento de linha de Bezier adicional. O buffer GGO_NATIVE pode conter uma curva de polilinha ou uma curva quadrática B-spline. Dois pontos de definem um segmento de linha enquanto três pontos definem um B-spline. Como cada tipo é ser desenhado com uma linha de Bezier usando PolyBezier, pior das hipóteses ocorre quando uma delimitação que é totalmente composta por segmentos de linha se expande para vários Beziers. Observe que, para expressar uma curva adicional segmento em uma representação de curva B-spline requer apenas um ponto adicional. Esse ponto define explicitamente "B" ou desativar curva aponte e define implicitamente a adicionais no ponto da curva. O ponto de curva na é o ponto médio para o próximo ponto de "B". Assim, em um segmento de linha adicionais ou um segmento de curva adicionais se expandirá para três pontos adicionais de uma linha de Bezier. O código pressupõe que o buffer nativo todo consistirá POINTFX estruturas para que ele possa determinar o maior número possível de pontos representado pelo buffer. O número real é um pouco menor como não há sobrecarga de estrutura em que descrevem as delimitações e curvas. O tamanho do buffer para a lista de Bezier é fornecido pelo número máximo possível de pontos multiplicado pelo tamanho de dados de uma estrutura de ponto e multiplicado por três. Três é o número de pontos adicionais que são necessários para cada segmento de linha adicionais ou segmento de spline quadrática quando convertido em um Bézier. Depois que o buffer de Bezier foi alocado o código analisa o buffer nativo iniciando no primeiro TTPOLYGONHEADER . Durante uma iteração do loop, o código processa uma delimitação e desenha-lo. Um segundo loop interno analisa cada tipo de curva. No caso de uma curva de polilinha (TT_PRIM_LINE), cada segmento de linha da polilinha é convertido e acrescentado à lista de Beziers com a função AppendPolyLineToBezier . Se a curva é uma B-spline (TT_PRIM_QSPLINE quadrática), a função AppendQuadBSplineToBezier converte e acrescenta o B-spline quadrática. Cada uma dessas funções usa um loop para analisar saída cada segmento da curva em seus pontos de controle independente. Em seguida, a linha ou o spline é convertido em um Bezier e acrescentado à lista de Beziers. Uma linha de Bezier pode desenhar uma linha reta facilmente. O início e término vetores simplesmente apontam para a extremidade oposta do segmento de linha. Isso é feito na função MakeBezierFromLine . Para converter uma spline quadrática uma spline de Bézier cúbica requer expressar pontos de controle do cúbicos em termos de pontos de controle do quadrática. A equação para converter os pontos de controle está localizada na função MakeBezierFromQBSpline . Antes da delimitação de desenho, o código garante que o caminho é fechado ao chamar a função CloseContour . A função é chamada somente se o início e pontos de extremidade da seqüência de Beziers não são coincidentes. Em seguida, a função PolyBezier é chamada. Após a delimitação é desenhada, TTPOLYGONHEADER da delimitação próxima for encontrado por aprimorando o ponteiro lpHeader além do final dos registros de delimitação atual. Se isso resultar em um valor do ponteiro além do fim do buffer nativo, o código processou todas as delimitações e sai. ReferênciasPara obter mais informações sobre a especificação de TrueType consulte: Microsoft TrueType Specifications (http://www.microsoft.com/typography/tt/tt.htm)
(http://www.microsoft.com/typography/tt/tt.htm)
Também disponível do CD do Microsoft Developer Network Library em especificações. A informação contida neste artigo aplica-se a:
Tradução automáticaIMPORTANTE: 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: 243285
(http://support.microsoft.com/kb/243285/en-us/
)
| Outros Recursos Outros Sites de Suporte
ComunidadesObtenha Ajuda AgoraTraduções deste artigo
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Voltar para o início