Glifler ve Metrikler bilgilerini okuyun

Dize genişliğini hesaplamak, glif koordinatlarını hesaplamak ve gliflerle yapılan diğer manipülasyonlar için C++ API Çözümü.

 

Aspose.Font API dönüştürme, gliflerin değiştirilmesi, Latin sembollerinin algılanması ve daha fazlası dahil olmak üzere yazı tipiyle ilgili kapsamlı bir dizi işlev sunar. Bu özelliklerden bazıları, bir yazı tipinin bireysel karakterleri veya sembollerin/karakterlerin grafik temsilleri olan gliflerin işlenmesiyle ilgilidir. Bir yazı tipinin bu birimleri hakkında daha fazla bilgi edinmek için Glif’e Giriş makalesine bakın.

Bu sayfa, Glif ve Metrik bilgilerini okuma seçeneğini ana hatlarıyla belirtir, ancak işlevselliği tam olarak anlamak için Glif Nesnelerini Kullanma . Burada çok sayıda C++ kod örneği bulacak ve Aspose.Font’un glifler ve Glif nesneleri ile çalışma yeteneklerini öğreneceksiniz. Glifleri işlemek için Aspose.Font kullanımını gösteren daha fazla kod örneği Aspose Github Projesi içinde bulunabilir.

Glif ölçüleri, burada kullanılan terim, bir yazı tipindeki belirli bir glifin bilgilerine ve ölçümlerine atıfta bulunur. Bir yazı tipindeki karakterlerin doğru konumlandırılması ve aralığı için önemli olan bir glifin yüksekliği, genişliği, ileri genişliği ve diğer boyutları gibi bilgileri içerebilirler. Bu ölçümler, metnin tutarlı ve doğru bir şekilde görüntülenmesini sağlamak için metin düzeni ve işleme sistemleri tarafından kullanılır.

Gliflerle çalışmak için şunlara ihtiyacımız var:

  • Zengin özelliklere sahip, güçlü ve kullanımı kolay bir belge işleme ve dönüştürme API'si olan Aspose.Font for C++ API.

  • NuGet paket yöneticisini açın ve Aspose.Font'u arayın ve kurun. Paket Yöneticisi Konsolundan aşağıdaki komutu da kullanabilirsiniz.

Package Manager Console Command


    PM> Install-Package Aspose.Font

C++ kullanarak dize genişliğini hesaplama adımları:

Glifleri kullanarak bir dizenin genişliğini hesaplamak için, önce dizedeki her bir glifin genişliğini belirlemeniz ve ardından toplam sayıyı elde etmek için bu genişlikleri toplamanız gerekir. Adımlarla açıklarsanız sıradaki sıra:

  1. Dizenin genişliğini hesaplamak için kullanmak istediğiniz yazı tipini ve boyutunu belirleyin.
  2. Dizedeki her karakter için yazı tipinde karşılık gelen glifi belirleyin. Size karşılık gelen glifin dizinini verecek olan karakter haritasını kullanın.
  3. Glif dizinini kullanarak, yazı tipinin metrik tablosunda glifin metriklerini arayın. Bir glifin metrikleri tipik olarak genişliğini, yüksekliğini ve ilerleme genişliğini içerecektir.
  4. Dizinin toplam genişliğini elde etmek için dizideki tüm gliflerin gelişmiş genişliklerini toplayın. Karakter aralığı bilgilerine dikkat etmeyi unutmayın.

Benzer bir işlemi C++ koduyla açıklıyorsanız, bir sonraki şekilde görünecektir.

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ı koordinatlarla hesaplama adımları:

  1. System::Drawing::Point türünde points listesini bildirin: Bu liste bir glif yolu segmenti..
  2. IPathSegment arayüzünde Init hizmeti referansını belirtin.
  3. Tüm glif yolu parçalarını 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.