用JAVA中的Graphics2D修复模糊



我想知道为什么在我的框架中显示文本必须如此模糊,我发现了这段代码,它的工作方式是

public void paint(Graphics graphicsObject){
    if(graphicsObject instanceof Graphics2D){
        Graphics2D g2D = (Graphics2D) graphicsObject;       
        g2D.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    }
    graphicsObject.drawString("not blurry text display", 200, 200);
}

很难理解这是怎么回事。

  • 为什么g2D.setRenderingHint正在修复我的模糊问题,但我没有用它来绘制我的字符串

首先,修复的不是模糊。这是混叠

当绘图函数试图使用光栅图像(像素矩阵,即正方形)创建曲线形状时,会出现混叠。如果线条不是垂直或水平的,那么最终会出现"楼梯"——锯齿状的边缘。

抗锯齿是一种使这种效果对眼睛不太可见的方法,方法是在绘制的线周围使用额外的像素,这些像素在前景和背景之间以不同的色调绘制。这欺骗了我们的眼睛,让我们把线条看作是"平滑的"。如果缩放使用抗锯齿绘制的图像,您可能会注意到实际线条周围的像素。

所以,实际上,抗锯齿模糊了线条,这让我们的眼睛看起来更光滑。


至于你的实际问题——你正在使用图形对象来画线。通过以Graphics2D的形式访问图形对象,可以在图形对象中设置提示。即使随后继续使用graphicsObject并使用其常规Graphics引用,方法drawString()也会被覆盖。这意味着它将在实现它的具体对象中被激活,该对象可以看到并使用存储提示的RenderingHint哈希图。

但是我不用它来画我的绳子?

你为什么这么认为?因为,你实际上在使用它。

如今,Graphics始终是Graphics2D对象,因此您的if语句将被执行。

CCD_ 7和CCD_。对于编译器来说,它们是不同类型的两个变量,允许调用不同的方法,但在执行时,这两个变量实际上指向同一个对象。

因此,通过在g2D上设置渲染提示,这与graphicsObject是同一个对象,绘制字符串将尊重该提示,并通过使用提示中指定的抗锯齿来修复模糊性。

相关内容

  • 没有找到相关文章

最新更新