Baca Informasi Glif dan Metrik

Solusi API C++ untuk menghitung lebar string, menghitung koordinat glif, dan manipulasi lain dengan glif.

 

Aspose.Font API menawarkan rangkaian fungsi terkait font yang komprehensif, termasuk konversi, manipulasi glif, deteksi simbol Latin, dan lainnya. Beberapa fitur ini berkaitan dengan manipulasi glif, yang merupakan karakter individual dari sebuah tipe huruf atau representasi grafis dari simbol/karakter. Untuk memahami lebih lanjut tentang unit-unit font ini, lihat artikel Introduction to Glyph .

Halaman ini menjelaskan opsi untuk membaca informasi Glif dan Metrik, tetapi untuk pemahaman lengkap tentang fungsionalitas, lihat artikel Using Glyph Objects . Di sana, Anda akan menemukan banyak contoh kode C++ dan mempelajari kemampuan Aspose.Font untuk bekerja dengan glif dan objek Glyph. Contoh kode tambahan yang menunjukkan penggunaan Aspose.Font untuk memanipulasi Glif dapat ditemukan di Aspose Github Project .

Metrik glif, istilah yang digunakan di sini, merujuk pada informasi dan pengukuran sebuah glif tertentu dalam sebuah font. Mereka dapat mencakup informasi seperti tinggi, lebar, lebar maju, dan dimensi lain dari sebuah glif, yang penting untuk penempatan dan spasi karakter yang tepat dalam sebuah font. Metrik ini digunakan oleh sistem tata letak teks dan rendering untuk memastikan tampilan teks yang konsisten dan akurat.

Untuk bekerja dengan glif, kita memerlukan:

  • Aspose.Font untuk API C++ yang kaya fitur, kuat, dan mudah digunakan untuk manipulasi dokumen dan konversi.

  • Buka manajer paket NuGet, dan cari Aspose.Font lalu instal. Anda juga dapat menggunakan perintah berikut dari Package Manager Console.

Package Manager Console Command


    PM> Install-Package Aspose.Font

Langkah-langkah untuk Menghitung lebar string menggunakan C++:

Untuk menghitung lebar string menggunakan glif, Anda perlu terlebih dahulu menentukan lebar masing-masing glif dalam string, lalu menjumlahkan lebar tersebut untuk mendapatkan total. Jika dijelaskan dengan langkah-langkah, urutannya sebagai berikut:

  1. Tentukan font dan ukuran yang ingin Anda gunakan untuk menghitung lebar string.
  2. Untuk setiap karakter dalam string, tentukan glif yang sesuai dalam font. Gunakan peta karakter, yang akan memberi Anda indeks glif yang bersesuaian.
  3. Dengan menggunakan indeks glif, cari metrik glif di tabel metrik font. Metrik glif biasanya mencakup lebar, tinggi, dan lebar maju.
  4. Jumlahkan lebar maju semua glif dalam string untuk mendapatkan total lebar string. Perhatikan informasi kern.

Jika menggambarkan proses serupa dengan kode C++, itu akan terlihat seperti berikut.

Kode C++ untuk mengetahui lebar 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));

Langkah-langkah untuk menghitung semua titik glif dengan koordinat menggunakan C++:

  1. Deklarasikan daftar points bertipe System::Drawing::Point: Daftar ini akan menyimpan titik-titik segmen jalur glif.
  2. Tentukan referensi layanan Init pada antarmuka IPathSegment .
  3. Iterasi semua segmen jalur glif dan jumlahkan titik-titiknya.

Kode C++ untuk menemukan titik glif

    //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;
    }



FAQ

1. Apa itu metrik mesin terbang?

Metrik mesin terbang adalah parameter yang memengaruhi posisi mesin terbang saat tata letak teks dibuat.

2. Apa itu metrik mesin terbang?

Metrik mesin terbang yang paling banyak digunakan adalah lebar muka, asal, bantalan samping, garis dasar, naik, naik, turun, turun, kotak pembatas, tinggi, lebar, dan kerning.

3. Bagaimana cara mengelola Glyph dengan Solusi API ini?

Untuk membuat kode mesin terbang di C#, gunakan entitas ruang nama Aspose.Font.Glyphs .

4. Apa pentingnya metrik mesin terbang?

Dengan memahami dan menyesuaikan metrik mesin terbang dengan benar, juru ketik dan desainer dapat memastikan penspasian, penyelarasan, dan keterbacaan teks yang optimal dalam materi cetak, antarmuka digital, atau halaman web.