Відтворення шрифту truetype c++

Символи - це символи, які пояснюють значення різних слів. Ви можете відтворювати різні текстові символи за допомогою шрифтів TrueType за допомогою C++ з API Aspose.Font for C++. Він підтримує різні функції відтворення тексту, зокрема TrueType, Type1, OTF, EOT та інші шрифти. Давайте дослідимо, як використовувати функції відтворення тексту за допомогою кількох простих викликів API. Ми будемо висвітлювати тему під такими заголовками:

C++ TrueType Font Rendering API – встановлення

Враховуючи популярність і попит на платформу C++, ми запровадили дуже корисні функції в API Aspose.Font for C++. Щоб відображати шрифти TrueType у ваших програмах, вам потрібно налаштувати API, завантаживши його з New Releases, або ви можете встановити його через NuGet за допомогою такої команди:

Install-Package Aspose.Font.Cpp

Реалізуйте інтерфейс для малювання гліфів для відтворення шрифтів TrueType за допомогою C++

Перш за все, вам потрібно реалізувати IGlyphOutlinePainter у просторі імен Aspose.Font.Rendering. Виконайте наведені нижче кроки для реалізації методів і класів:

  1. Створіть клас під назвою GlyphOutlinePainter
  2. Використовуйте System.Drawing.Drawing2D.GraphicsPath для малювання графіки

Нижче наведено фрагмент коду C++ для реалізації інтерфейсу для малювання гліфів:

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

По-друге, створіть метод із назвою DrawText, виконавши наступні кроки:

  1. Перебирайте символи в текстовому рядку
  2. Отримайте GID як гліф, ідентифікований для кожного символу
  3. Створіть GlyphOutlinePainter і перейдіть до об’єкта GlyphOutlineRenderer
  4. Укажіть координати гліфа за допомогою об’єкта Matrix.

Крім того, після виконання всіх цих кроків створіть службовий метод для обчислення розмірів шрифту для зображення, як описано в наступному фрагменті коду C++:

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 — це внутрішня роздільна здатність шрифту
    return (width / fontSourceResulution) * fontSize * resolutionCorrection;
}

Візуалізація тексту за допомогою шрифту TrueType за допомогою C++

Ми реалізували необхідний функціонал для відтворення тексту зі шрифтами TrueType. Тепер давайте викличемо методи за допомогою API Aspose.Font for C++ як наведений нижче фрагмент коду:

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";
//Назва файлу шрифту з повним шляхом
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";
//Назва файлу шрифту з повним шляхом
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");

Висновок

У цій статті ви дізналися, як відтворювати текст за допомогою шрифтів TrueType у C++. Хочете дізнатися більше про функції Aspose.Font for C++ API? Ви можете дізнатися більше, дослідивши посилання на API або документацію продукту. Однак, якщо ви зіткнулися з будь-якою неясністю або потребуєте допомоги, будь ласка, зв’яжіться з нами через безкоштовні форуми підтримки. Ми з нетерпінням чекаємо на співпрацю з вами!

Дивись також