עיבוד גופן truetype c++

תווים הם סמלים המסבירים את המשמעויות של מילים שונות. אתה יכול לעבד תווי טקסט שונים עם גופני TrueType באמצעות C++ עם Aspose.Font for C++ API. הוא תומך בתכונות שונות של עיבוד טקסט כולל TrueType, Type1, OTF, EOT וגופנים אחרים. תן לנו לחקור כיצד להשתמש בתכונות עיבוד הטקסט עם כמה קריאות API פשוטות. אנו נעסוק בנושא תחת הכותרות הבאות:

C++ TrueType Font Rendering API – התקנה

בהתחשב בפופולריות ובביקוש של פלטפורמת C++, הצגנו תכונות שימושיות מאוד ב-Aspose.Font for C++ API. על מנת לעבד גופני TrueType באפליקציות שלך, עליך להגדיר את ה-API על ידי הורדתו מ-מהדורות חדשות, או שתוכל להתקין אותו באמצעות 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. ציין קואורדינטות גליף עם אובייקט מטריקס

יתרה מכך, לאחר ביצוע כל השלבים הללו, צור שיטת עזר לחישוב ממדי גופן לתמונה כפי שמפורט בקטע הקוד הבא של 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 הוא ה-dpi הפנימי של הגופן
    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? תוכל ללמוד פרטים נוספים על ידי בדיקת API references או Product Documentation. עם זאת, אם אתה מתמודד עם אי בהירות או זקוק לסיוע, אנא אל תהסס לפנות אלינו דרך [פורומי תמיכה חינם]. אנו מצפים לעסוק איתך!

ראה גם