在OS X上搞砸了BufferedImage字体

时间:2014-07-29 02:43:54

标签: java swing fonts rendering bufferedimage

由于某种原因,绘制到BufferedImage的字符串与直接绘制到JComponent的字符串不同。

这是一个例子。顶部字符串是直接绘制的,而底部是使用缓冲区绘制的。

Huh?

这里发生了什么?

import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Map;

public class Main {

    static class Canvas extends JComponent
    {
        @Override
        public void paintComponent(Graphics g)
        {

            g.setColor(Color.WHITE);
            g.fillRect(0, 0, this.getWidth(), this.getHeight());
            g.setColor(Color.BLACK);
            g.drawString("OMFG look at this 'S'", 10, 20);

            BufferedImage bi = new BufferedImage(150,50,BufferedImage.TYPE_INT_RGB);
            Graphics2D imageG =  bi.createGraphics();
            imageG.setColor(Color.WHITE);
            imageG.fillRect(0, 0, 150, 50);
            imageG.setColor(Color.BLACK);
            imageG.setFont(g.getFont());
            imageG.drawString("OMFG look at this 'S'", 10, 10);

            g.drawImage(bi, 0, 30, this);

        }
    }
    public static void main(String[] args) {
        JFrame jf = new JFrame();
        jf.setMinimumSize(new Dimension(150, 80));
        jf.add(new Canvas());
        jf.setVisible(true);

    }
}

0 个答案:

没有答案