رندر فونت 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 را با دانلود آن از New Releases پیکربندی کنید، یا می توانید آن را از طریق NuGet با استفاده از دستور زیر نصب کنید:

Install-Package Aspose.Font.Cpp

برای رندر فونت های TrueType با استفاده از C++، رابطی را برای ترسیم Glyph پیاده سازی کنید

اول از همه، شما باید 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 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 یا Product Documentation جزئیات بیشتر را بیاموزید. با این حال، اگر با ابهامی مواجه شدید یا نیاز به کمک دارید، لطفاً از طریق تالارهای پشتیبانی رایگان با ما تماس بگیرید. ما مشتاقانه منتظر تعامل با شما هستیم!

همچنین ببینید