Rendera truetype-teckensnitt c++

Tecken är symboler som förklarar betydelsen av olika ord. Du kan rendera olika texttecken med TrueType-teckensnitt med C++ med Aspose.Font for C++ API. Den stöder olika textåtergivningsfunktioner inklusive TrueType, Type1, OTF, EOT och andra typsnitt. Låt oss utforska hur man använder textåtergivningsfunktionerna med några enkla API-anrop. Vi kommer att täcka ämnet under följande rubriker:

C++ TrueType Font Rendering API – Installation

Med tanke på populariteten och efterfrågan på C++-plattformen har vi introducerat mycket användbara funktioner i Aspose.Font for C++ API. För att rendera TrueType-teckensnitt i dina applikationer måste du konfigurera API:et genom att ladda ner det från New Releases, eller så kan du installera det via NuGet med följande kommando:

Install-Package Aspose.Font.Cpp

Implementera gränssnitt för att rita glyph för att rendera TrueType-teckensnitt med C++

Först och främst måste du implementera IGlyphOutlinePainter under namnområdet Aspose.Font.Rendering. Följ stegen nedan för implementering av metoder och klasser:

  1. Skapa en klass som heter GlyphOutlinePainter
  2. Använd System.Drawing.Drawing2D.GraphicsPath för att rita grafik

Nedan är C++-kodavsnittet för implementering av gränssnitt för att rita glyfer:

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

För det andra, skapa en metod med namnet DrawText med följande steg:

  1. Gå igenom symboler i textsträngen
  2. Få GID som glyf identifierad för varje symbol
  3. Skapa GlyphOutlinePainter och gå över till objektet GlyphOutlineRenderer
  4. Ange Glyfkoordinater med objektet Matrix

Dessutom, efter att ha följt alla dessa steg, skapa en verktygsmetod för beräkning av teckensnittsdimensioner till bild som utvecklas i följande C++-kodavsnitt:

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 är typsnittets interna dpi
    return (width / fontSourceResulution) * fontSize * resolutionCorrection;
}

Rendera text med TrueType Font med C++

Vi har implementerat den funktionalitet som krävs för rendering av text med TrueType-teckensnitt. Låt oss nu kalla metoderna som använder Aspose.Font för C++ API som kodavsnittet nedan:

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";
//Typsnittsfilnamn med fullständig sökväg
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";
//Typsnittsfilnamn med fullständig sökväg
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");

Slutsats

I den här artikeln har du lärt dig hur du renderar text med TrueType-teckensnitt med C++. Intresserad av att lära dig mer om funktionerna som erbjuds av Aspose.Font för C++ API? Du kan lära dig mer information genom att utforska API-referenser eller Produktdokumentation. Men om du möter någon tvetydighet eller behöver hjälp, vänligen kontakta oss via Free Support Forums. Vi ser fram emot att träffa dig!

Se även