TrueTypeフォントC++をレンダリングします

文字は、さまざまな単語の意味を説明する記号です。 Aspose.Font for C++APIでC++を使用すると、TrueTypeフォントでさまざまなテキスト文字をレンダリングできます。 TrueTypeType1OTFEOT、その他のフォントなど、さまざまなテキストレンダリング機能をサポートしています。いくつかの簡単なAPI呼び出しでテキストレンダリング機能を使用する方法を見てみましょう。このトピックについては、次の見出しで説明します。

C++ TrueTypeフォントレンダリングAPI–インストール

C++プラットフォームの人気と需要を考慮して、Aspose.Font for C++APIに非常に便利な機能を導入しました。アプリケーションでTrueTypeフォントをレンダリングするには、新しいリリースからダウンロードしてAPIを構成するか、次のコマンドを使用してNuGetからAPIをインストールできます。

Install-Package Aspose.Font.Cpp

C++を使用してTrueTypeフォントをレンダリングするためのグリフを描画するためのインターフェイスを実装する

まず、Aspose.Font.Rendering名前空間の下にIGlyphOutlinePainterを実装する必要があります。メソッドとクラスの実装については、以下の手順に従ってください。

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

C++を使用してTrueTypeフォントでテキストをレンダリングする

TrueTypeフォントを使用したテキストのレンダリングに必要な機能を実装しました。次に、以下のコードスニペットとしてAspose.Font for 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");

結論

この記事では、C++でTrueTypeフォントを使用してテキストをレンダリングする方法を学習しました。 Aspose.Font for C++ APIが提供する機能について詳しく知りたいですか? APIリファレンスまたは製品ドキュメントを調べると、詳細を知ることができます。ただし、あいまいな点がある場合やサポートが必要な場合は、無料サポートフォーラムからお気軽にご連絡ください。皆様のお越しを心よりお待ちしております!

関連項目