这是我的第一个话题,我为我的英语不好道歉(我是意大利语)。
我使用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);
}
}
答案 0 :(得分:1)
1:文本的抗锯齿是KEY_TEXT_ANTIALIASING
2:您正在将图像拉伸到文本非常像素化的程度。要么使图像变大,要么使字体变大,要么不要用图像填充画布(只绘制部分图像),而是将画布着色。 - 看drawImage(...)