Ler informações de Glifos e Métricas
Solução API C++ para calcular largura de string, coordenadas de glifos e outras manipulações com glifos.
A API Aspose.Font oferece uma gama abrangente de funções relacionadas com fontes, incluindo conversão, manipulação de glifos, deteção de símbolos latinos e muito mais. Algumas destas funcionalidades referem‑se à manipulação de glifos, que são caracteres individuais de um tipo de letra ou representações gráficas de símbolos/caracteres. Para compreender mais sobre estas unidades de uma fonte, consulte o artigo Introdução ao Glifo .
Esta página descreve a opção de ler informações de Glifos e Métricas, mas para uma compreensão completa da funcionalidade, consulte o artigo Usando objetos Glyph . Aqui, encontrará numerosos exemplos de código C++ e aprenderá sobre as capacidades do Aspose.Font para trabalhar com glifos e objetos Glyph. Mais exemplos de código que demonstram o uso do Aspose.Font para manipular Glifos podem ser encontrados no Aspose Projeto Github .
Métricas de glifo, o termo usado aqui, referem‑se à informação e medições de um glifo específico numa fonte. Podem incluir informações como altura, largura, avanço de largura e outras dimensões de um glifo, que são importantes para o posicionamento e espaçamento corretos dos caracteres numa fonte. Estas métricas são usadas pelos sistemas de layout e renderização de texto para garantir uma exibição consistente e precisa do texto.
Para trabalhar com glifos precisamos:
Aspose.Font para C++ API, que é uma API rica em recursos, poderosa e fácil de usar para manipulação e conversão de documentos.
Abra o gestor de pacotes NuGet e procure por Aspose.Font e instale. Também pode usar o seguinte comando no Console do Gestor de Pacotes.
Package Manager Console Command
PM> Install-Package Aspose.Font
Passos para calcular a largura da string usando C++:
Para calcular a largura de uma string usando glifos, precisa primeiro determinar a largura de cada glifo individual na string e depois somar essas larguras para obter o total. Se explicar em passos, a ordem é a seguinte:
- Determine a fonte e o tamanho que pretende usar para calcular a largura da string.
- Para cada carácter na string, determine o glifo correspondente na fonte. Use o mapa de caracteres, que lhe dará o índice do glifo correspondente.
- Usando o índice do glifo, procure as métricas do glifo na tabela de métricas da fonte. As métricas de um glifo normalmente incluem a sua largura, altura e avanço de largura.
- Some os avanços de largura de todos os glifos da string para obter a largura total da string. Preste atenção às informações de kerning.
Se descrever um processo semelhante com código C++, seria da seguinte forma.
Código C++ para descobrir a largura da string
using System;
using System::IO;
using System::Drawing;
using System::Collections::Generic;
using Aspose::Font::Sources;
using Aspose::Font::Glyphs;
using Aspose::Font::RenderingPath; //Declare the text and other constants
const System::String text = u"Hello world";
const int32_t fontSize = 10;
//Declare the variable for string width
double width = 0;
//Get glyph for each letter in text and calculate width for whole text.
//The same result can be achieved using method font.Metrics.MeasureString(text, fontSize).
for (char16_t symbol : text)
{
System::SharedPtr<GlyphId> gid = this->_font->get_Encoding()->DecodeToGid(symbol);
System::SharedPtr<Glyph> glyph = this->_font->GetGlyphById(gid);
width += (glyph->get_WidthVectorX() / this->_font->get_Metrics()->get_UnitsPerEM()) * fontSize;
}
font->get_Metrics()->MeasureString(text, width);
//Print the output results
System::Console::WriteLine(System::String::Format(u"Width for text \"{0}\" with font size {2} is equal {3}.", text, FontName, fontSize, width));Passos para calcular todos os pontos do glifo com coordenadas usando C++:
- Declare a lista pontos do tipo System::Drawing::Point: Esta lista armazenará os pontos de um segmento de caminho de glifo.
- Especifique a referência de serviço Init na interface IPathSegment .
- Itere por todos os segmentos de caminho de glifo e some os pontos.
Código C++ para descobrir pontos do glifo
//Declare the resultant list with points
System::SharedPtr<System::Collections::Generic::List<System::Drawing::Point>> points =
System::MakeObject<System::Collections::Generic::List<System::Drawing::Point>>();
//Init the service reference on IPathSegment
System::SharedPtr<IPathSegment> prevSegment;
//Iterate all the glyph path segments and collect points
for (auto&& segment : glyph->get_Path()->get_Segments())
{
if ((System::ObjectExt::Is<LineTo>(segment)) || (System::ObjectExt::Is<CurveTo>(segment)))
{
if (System::ObjectExt::Is<MoveTo>(prevSegment))
{
System::SharedPtr<MoveTo> moveTo = System::DynamicCast_noexcept<Aspose::Font::RenderingPath::MoveTo>(prevSegment);
AddPoint((int32_t)moveTo->get_X(), (int32_t)moveTo->get_Y(), points);
}
if (System::ObjectExt::Is<LineTo>(segment))
{
System::SharedPtr<LineTo> line = System::DynamicCast_noexcept<Aspose::Font::RenderingPath::LineTo>(segment);
AddPoint((int32_t)line->get_X(), (int32_t)line->get_Y(), points);
}
else if (System::ObjectExt::Is<CurveTo>(segment))
{
System::SharedPtr<CurveTo> curve = System::DynamicCast_noexcept<Aspose::Font::RenderingPath::CurveTo>(segment);
AddPoint((int32_t)curve->get_X1(), (int32_t)curve->get_Y1(), points);
AddPoint((int32_t)curve->get_X2(), (int32_t)curve->get_Y2(), points);
AddPoint((int32_t)curve->get_X3(), (int32_t)curve->get_Y3(), points);
}
}
prevSegment = segment;
}Perguntas frequentes
1. O que é uma métrica de glifo?
Métricas de glifo são os parâmetros que influenciam como o glifo é posicionado quando o layout de texto é criado.
2. O que são métricas de glifos?
As métricas de glifo mais usadas são largura de avanço, origem, rolamentos laterais, linha de base, subida, subida, descida, descida, caixa delimitadora, altura, largura e kerning.
3. Como gerenciar glifos com esta solução de API?
Para codificar glifos em C#, use as entidades do namespace Aspose.Font.Glyphs .
4. Qual é a importância das métricas de glifo?
Ao compreender e ajustar adequadamente as métricas de glifos, tipógrafos e designers podem garantir espaçamento, alinhamento e legibilidade ideais do texto em materiais impressos, interfaces digitais ou páginas da web.