人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

フォントファイルからフォントを読み込む

フォントファイルからフォントを読み込む方法です。ゲームにフォントファイルを含めて一緒に配布したい場合に使います。ちなみにフォントとは文字の形のことです。またテキストにアンチエイリアシングをかける方法もご紹介します。ただフォントファイルはサイズが大きいのが難点です。

M+IPAフォントは単独での再配布は禁止みたいなので必要ならここからダウンロードしてください。

フォントファイルのロード

上のサイトからダウンロードするか、font_test.jarを解凍するとM+2VM+IPAG-circle.ttfというファイルがあります。これがフォントファイルです。Windowsをお使いの方はダブルクリックするとどんなフォントか分かります。

createFont()メソッドはフォントファイルを読み込んでFontオブジェクトを作成するメソッドです。

    /**
     * ファイルからFontオブジェクトを生成
     * 
     * @param filename フォントファイル名
     * @return Fontオブジェクト
     */
    private Font createFont(String filename) {
        Font font = null;
        InputStream is = null;

        try {
            is = getClass().getResourceAsStream(filename);
            font = Font.createFont(Font.TRUETYPE_FONT, is);
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (FontFormatException e) {
            e.printStackTrace();
        }

        return font;
    }

createFont()の例です。

    // M+IPAフォントを作成
    // http://mix-mplus-ipa.sourceforge.jp/
    mIPAFont = createFont("M+2VM+IPAG-circle.ttf");
    // フォントサイズを24に変更
    // 変更しないと豆粒みたいな文字になるので注意!
    mIPAFont = mIPAFont.deriveFont(24.0f);

文字を描画するのはpaintComponent()です。

    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.setColor(Color.BLACK);
        g.fillRect(0, 0, WIDTH, HEIGHT);

        g.setColor(Color.WHITE);

        // デフォルトフォントで描画
        Font defaultFont = getFont().deriveFont(24.0f);
        g.setFont(defaultFont);
        g.drawString("デフォルトのフォント", 16, 32);

        // M+IPAフォントで描画
        g.setFont(mIPAFont); // M+IPAフォントをセット
        g.drawString("M+IPAフォント", 16, 64);

setFont()でフォントをセットしてdrawString()で文字を書いていますね。

アンチエイリアシング

描いてみるとわかりますが、文字がぎざぎざしていてあんまりきれいじゃありません。そこでアンチエイリアシングをかけてみます。アンチエイリアシングはぎざぎざを抑えてなめらかに表示することです。

    // さらにアンチエイリアシングをかける
    Graphics2D g2 = (Graphics2D) g;
    g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
            RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    g2.drawString("M+IPAフォント+アンチエイリアシング", 16, 96);

3つを比べてみると違いは一目瞭然です。

f:id:aidiary:20090828223124j:plain

もしこのフォントをエディタとかで使いたい場合は、C:\WINDOWS\Fontsにコピーして使ってください。Macは使ったことないのでわかりません・・・