Rendering di caratteri truetype in c++

I caratteri sono simboli che spiegano il significato di parole diverse. È possibile eseguire il rendering di caratteri di testo diversi con font TrueType utilizzando C++ con l’API Aspose.Font for C++. Supporta diverse funzionalità di rendering del testo tra cui TrueType, Type1, OTF, EOT e altri tipi di carattere. Esaminiamo come utilizzare le funzionalità di rendering del testo con alcune semplici chiamate API. Tratteremo l’argomento sotto i seguenti titoli:

API C++ per il rendering dei caratteri TrueType – Installazione

Considerando la popolarità e la domanda della piattaforma C++, abbiamo introdotto funzionalità molto utili nell’API Aspose.Font for C++. Per eseguire il rendering dei caratteri TrueType nelle tue applicazioni, devi configurare l’API scaricandola da Nuove versioni oppure installarla tramite NuGet utilizzando il comando seguente:

Install-Package Aspose.Font.Cpp

Implementare l’interfaccia per disegnare glifi per il rendering di caratteri TrueType utilizzando C++

Prima di tutto, devi implementare IGlyphOutlinePainter in Aspose.Font.Rendering namespace. Seguire i passaggi seguenti per l’implementazione di metodi e classi:

  1. Crea una classe denominata GlyphOutlinePainter
  2. Usa System.Drawing.Drawing2D.GraphicsPath per disegnare grafici

Di seguito è riportato il frammento di codice C++ per l’implementazione dell’interfaccia per disegnare glifi:

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

In secondo luogo, crea un metodo con il nome DrawText con i seguenti passaggi:

  1. Scorri i simboli nella stringa di testo
  2. Ottieni GID come glifo identificato per ogni simbolo
  3. Crea GlyphOutlinePainter e passa all’oggetto GlyphOutlineRenderer.
  4. Specifica le coordinate del glifo con l’oggetto Matrix.

Inoltre, dopo aver seguito tutti questi passaggi, crea un metodo di utilità per il calcolo delle dimensioni dei caratteri nell’immagine come elaborato nel seguente frammento di codice 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 è il dpi interno del font
    return (width / fontSourceResulution) * fontSize * resolutionCorrection;
}

Rendering di testo con caratteri TrueType utilizzando C++

Abbiamo implementato le funzionalità richieste per il rendering del testo con i font TrueType. Ora chiamiamo i metodi usando Aspose.Font per l’API C++ come frammento di codice di seguito:

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";
//Nome file font con percorso completo
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";
//Nome file font con percorso completo
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");

Conclusione

In questo articolo, hai imparato come eseguire il rendering del testo utilizzando i caratteri TrueType con C++. Interessato a saperne di più sulle funzionalità offerte da Aspose.Font per l’API C++? Puoi apprendere ulteriori dettagli esplorando Riferimenti API o Documentazione prodotto. Tuttavia, in caso di ambiguità o se hai bisogno di assistenza, non esitare a contattarci tramite Forum di supporto gratuito. Non vediamo l’ora di impegnarci con te!

Guarda anche