在BufferedImage上呈现字符串的问题

时间:2015-01-21 14:15:16

标签: java string swing graphics2d

这是我的第一个话题,我为我的英语不好道歉(我是意大利语)。

我使用javax.swing库编写了一个示例2d应用程序。

我使用BufferedImage来渲染形状,图像和字体。 图像以Canvas(java.awt)呈现。

图像的大小为100x100,Canvas的大小为700x500。

现在的问题是当我将字符串绘制到图像中时,因为字符串被绘制为像素化。我试图激活抗锯齿但它们看起来很模糊。

有没有办法解决这个问题?

这是我的代码:

public class Application extends Canvas implements Runnable {
public static final int WIDTH=700, HEIGHT=500;

private BufferedImage image;
private Thread thread;

public Application() {
    image=new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);

    setSize(WIDTH, HEIGHT);
}

public void addNotify() {
    super.addNotify();
    if(thread==null) {
        thread=new Thread(this);
    }
    thread.start();
}
public void run() {
    while(true) {
        render();
    }
}

public void render() {
    BufferStrategy bs=getBufferStrategy();
    if(bs==null) {
        createBufferStrategy(2);
        return;
    }

    Graphics2D g=(Graphics2D)bs.getDrawGraphics();

    Graphics2D imageG=(Graphics2D)image.createGraphics();
    image.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    imageG.setColor(Color.BLUE);
    imageG.fillRect(0, 0, image.getWidth(), image.getHeight());

    //rendering other stuffs

    imageG.setColor(Color.WHITE);

    Font f=new Font(Font.SANS_SERIF, Font.PLAIN, 15);
    imageG.setFont(f);
    imageG.drawString("hello", 40, 50);


    g.drawImage(image, 0, 0, WIDTH, HEIGHT, null);

    g.dispose();
    bs.show();
}

public static void main(String[] args) {
    JFrame f=new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);



    f.add(new Application());
    f.pack();
    f.setLocationRelativeTo(null);
    f.setVisible(true);
}
}

1 个答案:

答案 0 :(得分:1)

1:文本的抗锯齿是KEY_TEXT_ANTIALIASING

2:您正在将图像拉伸到文本非常像素化的程度。要么使图像变大,要么使字体变大,要么不要用图像填充画布(只绘制部分图像),而是将画布着色。 - 看drawImage(...)