Glif ve Ölçüm Bilgilerini Okuyun
C++ API Çözümü, dize genişliğini hesaplamak, glif koordinatlarını belirlemek ve gliflerle diğer manipülasyonları gerçekleştirmek için.
Aspose.Font API, dönüşüm, glif manipülasyonu, Latin sembollerinin tespiti ve daha fazlasını içeren kapsamlı bir font işlevleri yelpazesi sunar. Bu özelliklerin bir kısmı, bir tipografinin bireysel karakterleri veya sembol/karakterlerin grafik temsilleri olan gliflerin manipülasyonuyla ilgilidir. Bu bir font birimlerini daha iyi anlamak için, Glyph’ye Giriş makalesine bakın.
Bu sayfa Glif ve Ölçüm bilgilerini okuma seçeneğini özetler, ancak işlevselliğin tam anlaşılması için lütfen Glif Nesnelerini Kullanma makalesine bakın. Burada birçok C++ kod örneği bulacak ve Aspose.Font’un glifler ve Glif nesneleriyle çalışma yeteneklerini öğreneceksiniz. Glifleri manipüle etmek için Aspose Github Projesi içinde daha fazla kod örneği bulunabilir.
Glif ölçümleri, burada kullanılan terim, bir font içindeki belirli bir glifin bilgi ve ölçümlerini ifade eder. Yükseklik, genişlik, ilerleme genişliği ve diğer boyutlar gibi bilgileri içerebilir; bu ölçümler karakterlerin doğru konumlandırılması ve aralık ayarı için önemlidir. Bu ölçümler, metin yerleşimi ve render sistemleri tarafından tutarlı ve doğru metin görüntüsü sağlamak için kullanılır.
Gliflerle çalışmak için şunlara ihtiyacımız var:
Aspose.Font for C++ API, özellik bakımından zengin, güçlü ve kullanımı kolay bir belge manipülasyon ve dönüşüm API'sidir.
NuGet paket yöneticisini açın, Aspose.Font aratın ve yükleyin. Aşağıdaki komutu Paket Yöneticisi Konsolu'ndan da kullanabilirsiniz.
Package Manager Console Command
PM> Install-Package Aspose.Font
C++ Kullanarak Dize Genişliğini Hesaplama Adımları:
Bir dizedeki her bir glifin genişliğini belirleyip, bu genişlikleri toplayarak toplam genişliği elde etmek için önce her bir glifin genişliğini belirlemelisiniz. Adımları açıklarsak sıralama şu şekildedir:
- Dize genişliğini hesaplamak için kullanmak istediğiniz font ve boyutu belirleyin.
- Dizedeki her karakter için, fonttaki karşılık gelen glifi belirleyin. Karakter haritasını kullanarak ilgili glifin indeksini alın.
- Glif indeksini kullanarak, fontun ölçüm tablosundaki glif ölçümlerine bakın. Glif ölçümleri genellikle genişlik, yükseklik ve ilerleme genişliğini içerir.
- Dizedeki tüm gliflerin ilerleme genişliklerini toplayarak toplam dize genişliğini elde edin. Kerning bilgisine dikkat edin.
Benzer bir süreci C++ kodu ile anlatırsak, aşağıdaki gibi olacaktır.
Dize Genişliğini Bulmak için C++ Kodu
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));C++ Kullanarak Tüm Glif Noktalarını Koordinatlarıyla Hesaplama Adımları:
- System::Drawing::Point türünde points listesini ilan edin: Bu liste bir glif yol segmentinin noktalarını depolayacak.
- IPathSegment arayüzünde Init servis referansını belirtin.
- Tüm glif yol segmentlerini yineleyin ve noktaları toplayın.
Glif Noktalarını Bulmak için C++ Kodu
//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;
}SSS
1. Glif metriği nedir?
Glif ölçümleri , metin düzeni oluşturulduğunda glifin nasıl konumlandırılacağını etkileyen parametrelerdir.
2. Glif ölçüleri nelerdir?
En çok kullanılan glif metrikleri ilerleme genişliği, orijin, yan yönler, taban çizgisi, yükseliş, yükseliş, iniş, iniş, sınırlayıcı kutu, yükseklik, genişlik ve karakter aralığıdır.
3. Bu API Çözümü ile Glifler nasıl yönetilir?
C# dilinde glifleri kodlamak için Aspose.Font.Glyphs ad alanının varlıklarını kullanın.
4. Glif ölçümlerinin önemi nedir?
Glif ölçümlerini anlayarak ve uygun şekilde ayarlayarak, tipograflar ve tasarımcılar basılı materyallerde, dijital arayüzlerde veya web sayfalarında metnin en uygun aralık, hizalama ve okunabilirliğini sağlayabilirler.