Merender font truetype c++

Karakter adalah simbol yang menjelaskan arti dari kata-kata yang berbeda. Anda dapat merender karakter teks yang berbeda dengan TrueType fonts menggunakan C++ dengan Aspose.Font for C++ API. Ini mendukung berbagai fitur rendering teks termasuk TrueType, Type1, OTF, EOT, dan font lainnya. Mari kita jelajahi cara menggunakan fitur rendering teks dengan beberapa panggilan API sederhana. Kami akan membahas topik di bawah judul berikut:

C++ TrueType Font Rendering API – Instalasi

Mempertimbangkan popularitas dan permintaan platform C++, kami telah memperkenalkan fitur yang sangat berguna di Aspose.Font for C++ API. Untuk merender font TrueType di aplikasi Anda, Anda perlu mengonfigurasi API dengan mengunduhnya dari Rilis Baru, atau Anda dapat menginstalnya melalui NuGet menggunakan perintah berikut:

Install-Package Aspose.Font.Cpp

Implementasikan Antarmuka untuk Menggambar Glyph untuk Merender TrueType Fonts menggunakan C++

Pertama-tama, Anda perlu mengimplementasikan IGlyphOutlinePainter di bawah namespace Aspose.Font.Rendering. Ikuti langkah-langkah di bawah ini untuk penerapan metode dan kelas:

  1. Buat kelas bernama GlyphOutlinePainter
  2. Gunakan System.Drawing.Drawing2D.GraphicsPath untuk menggambar grafik

Di bawah ini adalah cuplikan kode C++ untuk implementasi antarmuka untuk menggambar mesin terbang:

For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-C
RenderingText::GlyphOutlinePainter::GlyphOutlinePainter(System::SharedPtr<System::Drawing::Drawing2D::GraphicsPath> path)
{
    _path = path;
}

void RenderingText::GlyphOutlinePainter::MoveTo(System::SharedPtr<Aspose::Font::RenderingPath::MoveTo> moveTo)
{
    _path->CloseFigure();
    _currentPoint.set_X((float)moveTo->get_X());
    _currentPoint.set_Y((float)moveTo->get_Y());
}

void RenderingText::GlyphOutlinePainter::LineTo(System::SharedPtr<Aspose::Font::RenderingPath::LineTo> lineTo)
{
    float x = (float)lineTo->get_X();
    float y = (float)lineTo->get_Y();
    _path->AddLine(_currentPoint.get_X(), _currentPoint.get_Y(), x, y);
    _currentPoint.set_X(x);
    _currentPoint.set_Y(y);
}

void RenderingText::GlyphOutlinePainter::CurveTo(System::SharedPtr<Aspose::Font::RenderingPath::CurveTo> curveTo)
{
    float x3 = (float)curveTo->get_X3();
    float y3 = (float)curveTo->get_Y3();
    
    _path->AddBezier(_currentPoint.get_X(), _currentPoint.get_Y(), (float)curveTo->get_X1(), (float)curveTo->get_Y1(), (float)curveTo->get_X2(), (float)curveTo->get_Y2(), x3, y3);
    
    _currentPoint.set_X(x3);
    _currentPoint.set_Y(y3);
}

void RenderingText::GlyphOutlinePainter::ClosePath()
{
    _path->CloseFigure();
}

System::Object::shared_members_type Aspose::Font::Examples::WorkingWithTrueTypeAndOpenTypeFonts::RenderingText::GlyphOutlinePainter::GetSharedMembers()
{
    auto result = System::Object::GetSharedMembers();
    
    result.Add("Aspose::Font::Examples::WorkingWithTrueTypeAndOpenTypeFonts::RenderingText::GlyphOutlinePainter::_path", this->_path);
    result.Add("Aspose::Font::Examples::WorkingWithTrueTypeAndOpenTypeFonts::RenderingText::GlyphOutlinePainter::_currentPoint", this->_currentPoint);
    
    return result;
}

Kedua, silahkan buat method dengan nama DrawText dengan langkah-langkah sebagai berikut:

  1. Mengulangi simbol dalam string teks
  2. Dapatkan GID sebagai mesin terbang yang diidentifikasi untuk setiap simbol
  3. Buat GlyphOutlinePainter dan teruskan ke objek GlyphOutlineRenderer.
  4. Tentukan koordinat Glyph dengan objek Matrix.

Selain itu, setelah mengikuti semua langkah ini, buat metode utilitas untuk menghitung dimensi font ke gambar seperti yang diuraikan dalam cuplikan kode C++ berikut:

For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-C
double RenderingText::FontWidthToImageWith(double width, int32_t fontSourceResulution, double fontSize, double dpi /* = 300*/)
{
    double resolutionCorrection = dpi / 72;
    // 72 adalah dpi internal font
    return (width / fontSourceResulution) * fontSize * resolutionCorrection;
}

Render Teks dengan TrueType Font menggunakan C++

Kami telah menerapkan fungsionalitas yang diperlukan untuk merender teks dengan font TrueType. Sekarang mari kita panggil metode menggunakan Aspose.Font for C++ API seperti potongan kode di bawah ini:

For complete examples and data files, please go to https://github.com/aspose-font/Aspose.Font-for-C
System::String dataDir = RunExamples::GetDataDir_Data();
    
System::String fileName1 = dataDir + u"Montserrat-Bold.ttf";
//Nama file font dengan path lengkap
System::SharedPtr<FontDefinition> fd1 = System::MakeObject<FontDefinition>(Aspose::Font::FontType::TTF, System::MakeObject<FontFileDefinition>(u"ttf", System::MakeObject<FileSystemStreamSource>(fileName1)));
System::SharedPtr<TtfFont> ttfFont1 = System::DynamicCast_noexcept<Aspose::Font::Ttf::TtfFont>(Aspose::Font::Font::Open(fd1));
    
System::String fileName2 = dataDir + u"Lora-Bold.ttf";
//Nama file font dengan path lengkap
System::SharedPtr<FontDefinition> fd2 = System::MakeObject<FontDefinition>(Aspose::Font::FontType::TTF, System::MakeObject<FontFileDefinition>(u"ttf", System::MakeObject<FileSystemStreamSource>(fileName2)));
System::SharedPtr<TtfFont> ttfFont2 = System::DynamicCast_noexcept<Aspose::Font::Ttf::TtfFont>(Aspose::Font::Font::Open(fd2));
    
DrawText(u"Hello world", ttfFont1, 14, System::Drawing::Brushes::get_White(), System::Drawing::Brushes::get_Black(), dataDir + u"hello1_montserrat_out.jpg");
DrawText(u"Hello world", ttfFont2, 14, System::Drawing::Brushes::get_Yellow(), System::Drawing::Brushes::get_Red(), dataDir + u"hello2_lora_out.jpg");

Kesimpulan

Pada artikel ini, Anda telah mempelajari cara merender teks menggunakan font TrueType dengan C++. Tertarik untuk mempelajari lebih lanjut tentang fitur yang ditawarkan oleh Aspose.Font for C++ API? Anda dapat mempelajari detail lebih lanjut dengan menjelajahi referensi API atau Dokumentasi Produk. Namun, jika Anda menghadapi ambiguitas atau membutuhkan bantuan, jangan ragu untuk menghubungi kami melalui Forum Dukungan Gratis. Kami berharap dapat terlibat dengan Anda!

Lihat juga