スポンサーリンク

RustでFreeType-rsを使用

FreeType-rsは内部でビルド済みのFreeTypeを呼び出しているので、ビルド済みFreeTypeを用意する必要がある。加えて、pkg-configが必要。

freetype2の導入

以下でfreetype2を導入。

vcpkg install freetype:x64-windows --triplet x64-windows --feature-flags=manifests

これにより、freetype2の関連ライブラリと一緒に、.pcファイル(pkg-configに必要)が生成される。

c:\app\vcpkg\installed\x64-windows\lib\pkgconfig\freetype2.pc

pkg-configの導入と設定

以下よりpkg-config-liteを導入し、パスを通す。

https://sourceforge.net/projects/pkgconfiglite/

Rustで使用

環境変数PKG_CONFIG_PATHを追加。これでcargoが.pcファイルを見つけられるようになる。

PKG_CONFIG_PATH=C:\app\vcpkg\installed\x64-windows\lib\pkgconfig

RustRoverであれば、実行/デバッグ構成から環境変数を設定できる。

Cargo.toml

[dependencies]
freetype-rs = "0.38.0"

main.rs

use freetype::Library;

// image = "0.25.6" を追加
use image::{GrayImage, Luma};

fn main() -> Result<(), Box<dyn std::error::Error>> {

    // FreeTypeライブラリ初期化
    let lib = Library::init()?;

    // フォント読み込み
    let face = lib.new_face("C:/Windows/Fonts/arial.ttf", 0)?;
    face.set_char_size(40 * 64, 0, 300, 0)?; // 40pt, 300dpi

    // 描画する文字
    face.load_char('A' as usize, freetype::face::LoadFlag::RENDER)?;

    let glyph = face.glyph();
    let bitmap = glyph.bitmap();

    let width = bitmap.width() as u32;
    let rows = bitmap.rows() as u32;

    // グレースケール画像作成
    let mut img = GrayImage::new(width, rows);

    for y in 0..rows {
        for x in 0..width {
            let value = bitmap.buffer()[(y * width + x) as usize];
            img.put_pixel(x, y, Luma([value]));
        }
    }

    img.save("glyph.png")?;// 出力

    Ok(())
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: