【发布时间】:2011-05-16 04:31:14
【问题描述】:
我是 Java 新手,正在尝试使用 Java2D 图形来创建图像。但是输出是抗锯齿的。我尝试了很多方法来纠正它,但没有奏效。字符变得扭曲或锯齿状。
public BufferedImage createNameOnButton(String label) {
int messageWidth = 0;
Font font = new Font("Arial", Font.PLAIN, 11);
BufferedImage bi = new BufferedImage(
10, 10, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = (Graphics2D) bi.getGraphics();
g2d.setRenderingHint(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(
RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setRenderingHint(
RenderingHints.KEY_FRACTIONALMETRICS,
RenderingHints.VALUE_FRACTIONALMETRICS_ON);
g2d.setFont(font);
bi = g2d.getDeviceConfiguration()
.createCompatibleImage(500, 30, Transparency.BITMASK);
FontMetrics fm = bi.getGraphics().getFontMetrics(font);
int messageHeight = fm.getHeight() - fm.getDescent();
for (char ch : label.toCharArray()) {
messageWidth += fm.charWidth(ch);
}
bi = bi.getSubimage(50, 0, messageWidth + 10, fm.getHeight());
Graphics g = bi.getGraphics();
g.setColor(Color.black);
AttributedString as = new AttributedString(label);
as.addAttribute(TextAttribute.FONT, font);
g.drawString(as.getIterator(), 5, messageHeight);
g2d.dispose();
g.dispose();
return bi;
}
谁能帮我纠正错误?
【问题讨论】:
-
你先创建一个 10x10 的图像是什么?您的代码对于它应该做的事情真的很复杂。
-
我不确定我是否理解。从你的问题,我知道你不希望角色被抗锯齿。但是阅读代码也就不足为奇了,因为它到处都写着 ANTIALIAS_ON。你能解释一下吗?
-
感谢您的说明 - 我使用 ANTIALIAS_OFF 测试了代码,但仍有一些字符作为抗锯齿(不是所有字符)出现,例如 N 的垂直 '\'、'a'、 'v', 'e', y' , 'o' - 基本上字符的边缘不光滑。我还有什么事情要做吗?
-
也如下所述 - 我的要求是编写一个函数,该函数返回一个 BufferedImage,其中包含模式文本“Deliver Me to
”。短语“Deliver Me to”应为黑色,而流中收集的“ ”应为蓝色。你能提供一些相同的意见吗?
标签: java graphics java-2d antialiasing