Olvassa el a glifek és metrika információkat
C++ API megoldás a karakterlánc szélességének kiszámítására, glif koordináták meghatározására és egyéb glif manipulációkra.
Az Aspose.Font API átfogó betűtípus-funkciókat kínál, beleértve a konverziót, a glifek manipulálását, a latin szimbólumok felismerését és még sok mást. Néhány ezek közül a glifek manipulálásával kapcsolatos, amelyek egy betűtípus egyedi karakterei vagy szimbólumok/karakterek grafikus ábrázolásai. A betűtípus egységeiről további információkért lásd a Introduction to Glyph cikket.
Ez az oldal a glif és metrika információk olvasásának lehetőségét mutatja be, de a funkció teljes körű megértéséhez tekintse meg a Using Glyph Objects cikket. Itt számos C++ példakódot talál, és megismerheti az Aspose.Font képességeit a glifekkel és Glyph objektumokkal való munkához. További kódpéldák a glifek manipulálására megtalálhatók az Aspose Github Project alatt.
A glif metrikák, itt használt kifejezés, egy adott glif információit és méreteit jelöli a betűtípusban. Ide tartozhat a magasság, szélesség, előrehaladási szélesség és egyéb méretek, amelyek fontosak a karakterek megfelelő elhelyezéséhez és távolságához egy betűtípusban. Ezeket a metrikákat a szöveg elrendező és renderelő rendszerek használják a szöveg konzisztens és pontos megjelenítésének biztosításához.
A glifekkel való munkához szükségünk van:
Aspose.Font for C++ API, amely egy funkciógazdag, erőteljes és könnyen használható dokumentummanipulációs és konverziós API.
Nyissa meg a NuGet csomagkezelőt, keressen az Aspose.Font-ra és telepítse. A következő parancsot is használhatja a Package Manager Console‑ból.
Package Manager Console Command
PM> Install-Package Aspose.Font
Lépések a karakterlánc szélességének kiszámításához C++-ban:
A karakterlánc szélességének glifekkel történő kiszámításához először meg kell határozni az egyes glifek szélességét a karakterláncban, majd ezeket összeadni a teljes szélesség érdekében. A lépések a következők:
- Határozza meg a betűtípust és a méretet, amelyet a karakterlánc szélességének kiszámításához használ.
- A karakterlánc minden karakteréhez határozza meg a megfelelő glifet a betűtípusban. Használja a karaktertérképet, amely megadja a megfelelő glif indexét.
- A glif indexének felhasználásával keresse meg a glif metrikáit a betűtípus metrikatáblájában. A glif metrikái általában tartalmazzák a szélességet, magasságot és előrehaladási szélességet.
- Adja össze az összes glif előrehaladási szélességét a karakterláncban a teljes szélesség megszerzéséhez. Figyeljen a kerning információra.
Ha hasonló folyamatot C++ kóddal ír le, akkor a következőképpen néz ki.
C++ kód a karakterlánc szélességének meghatározásához
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));Lépések az összes glif pont koordinátájának kiszámításához C++-ban:
- Deklarálja a points listát a System::Drawing::Point típusú elemekkel: Ez a lista a glif útvonal szegmens pontjait tárolja.
- Adja meg az Init szolgáltatás hivatkozását a IPathSegment interfészen.
- Iteráljon végig minden glif útvonal szegményen és adja össze a pontokat.
C++ kód a glif pontok meghatározásához
//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;
}GYIK
1. Mi az a glif metrika?
A karakterjellemzők azok a paraméterek, amelyek befolyásolják a jelkép elhelyezését a szövegelrendezés létrehozásakor.
2. Mik azok a glif-metrikák?
A leggyakrabban használt karakterjel-metrikák a szélesség, az origó, az oldalsó csapágyak, az alapvonal, az emelkedés, az emelkedés, az ereszkedés, a süllyedés, a határolókeret, a magasság, a szélesség és a bevágás.
3. Hogyan kezelheti a karakterjeleket ezzel az API-megoldással?
Karjelek kódolásához C#-ban használja az Aspose.Font.Glyphs névtér entitásait.
4. Mi a fontossága a karakterjel-mérőknek?
A karakterjel-metrikák megértésével és megfelelő beállításával a tipográfusok és a tervezők biztosíthatják a nyomtatott anyagokon, digitális felületeken vagy weboldalakon található szöveg optimális térközét, igazítását és olvashatóságát.