تقديم خط تروتايب سي ++

الأحرف هي رموز تشرح معاني الكلمات المختلفة. يمكنك عرض أحرف نصية مختلفة باستخدام خطوط TrueType باستخدام C++ مع واجهة برمجة تطبيقات Aspose.Font for C++. وهو يدعم ميزات عرض النص المختلفة بما في ذلك TrueType و Type1 و OTF و EOT وخطوط أخرى. دعنا نستكشف كيفية استخدام ميزات عرض النص مع بضع استدعاءات بسيطة لواجهة برمجة التطبيقات. سنغطي الموضوع تحت العناوين التالية:

C++ TrueType Font Rendering API - التثبيت

بالنظر إلى شعبية منصة C++ والطلب عليها ، فقد قدمنا ميزات مفيدة جدًا في Aspose.Font for C++ API. لعرض خطوط TrueType في تطبيقاتك ، تحتاج إلى تكوين API عن طريق تنزيلها من New Releases ، أو يمكنك تثبيتها عبر NuGet باستخدام الأمر التالي:

Install-Package Aspose.Font.Cpp

تنفيذ واجهة لرسم الصورة الرمزية لتقديم خطوط تروتايب باستخدام 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. حدد إحداثيات Glyph مع كائن 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 لـ 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 لواجهة برمجة تطبيقات C++؟ يمكنك معرفة المزيد من التفاصيل من خلال استكشاف مراجع API أو وثائق المنتج. ومع ذلك ، إذا واجهت أي غموض أو احتجت إلى مساعدة ، فلا تتردد في الاتصال بنا عبر منتديات الدعم المجاني. نحن نتطلع إلى التعامل معك!

أنظر أيضا