如何在Graphics2D中制作像素完美的Line2D

10

你好,我有一个带有几个Line2D对象的JPanel。问题是当我绘制这些线时,它们没有按照我想要的方式出现。线条不够平滑,难以用言语解释,因此我在发布一张图片,

enter image description here

放大的区域,

enter image description here

如何使它们看起来更加精细而不是皱巴巴的。

谢谢


3
我不太了解Java和Swing,但我认为你正在寻找抗锯齿功能。 - Dair
1个回答

10

问题可能是您的图形上下文未启用抗锯齿。在绘制之前尝试使用以下代码行:

graphics.setRenderingHint(
        RenderingHints.KEY_ANTIALIASING,
        RenderingHints.VALUE_ANTIALIAS_ON);

这里的graphics是您的Graphics2D实例。

后来,当您发现绘制的文本也很丑陋而不平滑时,您会想要使用

graphics.setRenderingHint(
        RenderingHints.KEY_TEXT_ANTIALIASING,
        RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

然而,文字稍微有些复杂;这个提示有几个值可用,取决于(其他因素之间)你要将文本绘制到的屏幕类型。你应该阅读RenderingHints.KEY_TEXT_ANTIALIASING API 文档了解更多细节。


谢谢,我刚刚编辑了你的代码,概念是正确的,但是setRenderingHits需要Map对象。所以我将其更改为setRenderingHint,并且常量在RenderingHints中而不是Graphics2D中。 :) - TeaCupApp
哎呀,你说得对,我在添加更多细节时不小心覆盖了你的编辑。我已经修复了它,将 setRenderingHints 改为 setRenderingHint。谢谢! - Adrian Petrescu
在我看来,抗锯齿应该默认开启(但实际上它并没有,默认关闭),希望Oracle的相关人员能够改进。 - Luigi Plinge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接