読者です 読者をやめる 読者になる 読者になる

人工知能に関する断創録

人工知能、認知科学、心理学、ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。最近は、機械学習・Deep Learningに関する記事が多いです。



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

Javagame

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

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は使ったことないのでわかりません・・・