Символы — это символы, которые объясняют значения различных слов. Вы можете отображать различные текстовые символы с помощью шрифтов TrueType с помощью C++ с Aspose.Font for C++ API. Он поддерживает различные функции рендеринга текста, включая TrueType, Type1, OTF, EOT и другие шрифты. Давайте рассмотрим, как использовать функции рендеринга текста с помощью нескольких простых вызовов API. Мы рассмотрим эту тему под следующими заголовками:
- API рендеринга шрифтов C++ TrueType — установка
- Реализуйте интерфейс для рисования глифа для рендеринга шрифтов TrueType с использованием C++
- Рендеринг текста со шрифтом TrueType с использованием C++
API рендеринга шрифтов C++ TrueType — установка
Учитывая популярность и востребованность платформы C++, мы добавили очень полезные функции в API Aspose.Font for C++. Чтобы отображать шрифты TrueType в ваших приложениях, вам необходимо настроить API, загрузив его из Новые выпуски, или вы можете установить его через NuGet с помощью следующей команды:
Install-Package Aspose.Font.Cpp
Реализуйте интерфейс для рисования глифа для визуализации шрифтов TrueType с использованием C++
Прежде всего, вам необходимо реализовать IGlyphOutlinePainter в пространстве имен Aspose.Font.Rendering. Выполните следующие шаги для реализации методов и классов:
- Создайте класс с именем GlyphOutlinePainter.
- Используйте 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 со следующими шагами:
- Перебирать символы в текстовой строке
- Получить GID как глиф, идентифицированный для каждого символа
- Создайте GlyphOutlinePainter и передайте объекту GlyphOutlineRenderer
- Укажите координаты глифа с помощью объекта 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. Теперь давайте вызовем методы, используя Aspose.Font for C++ API, как фрагмент кода ниже:
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 или документацию по продукту. Однако, если вы столкнулись с какой-либо неясностью или вам нужна помощь, свяжитесь с нами через бесплатные форумы поддержки. Мы с нетерпением ждем возможности пообщаться с вами!