【问题标题】:Improving Java Graphics2D Quality提高 Java Graphics2D 质量
【发布时间】:2013-10-29 07:32:41
【问题描述】:

所以,我正在画 100 个同心圆。然而,当我尝试使用 Graphics2D 渲染如此大量的同心圆时,它开始看起来有点模糊并且通常没有吸引力(见图)。

    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
    g2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
    g2.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
    g2.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
    g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);

我已经完成了所有这些工作,但这似乎已经做得很好了。还有什么我可以做的,或者是否有另一个图书馆可以让我得到更好的结果?

编辑:这都是由 fillOval 方法完成的。比如:

 for (int i = 0; i < 100; i++) {
  x = getX(i);
  y = getY(i);
  length = getLength(i);
  g2.fillOval(x,y,length,length);
 }

【问题讨论】:

  • 那张照片让我眼花缭乱:O 出于好奇,你为什么要这样做?
  • 这只是一个……实验……
  • 如需尽快获得更好的帮助,请发帖SSCCE
  • 取决于你如何渲染它,正如@AndrewThompson 所说,请发布一些代码。
  • 您可以尝试的另一件事是将 RenderingHints.KEY_STROKE_CONTROL 设置为 RenderingHints.VALUE_STROKE_NORMALIZE,这将使笔触更清晰,或 VALUE_STROKE_PURE,使它们更融合。

标签: java awt java-2d graphics2d


【解决方案1】:

您看到的斑点是多个边缘靠在一起的对象的抗锯齿绘制的伪影。由于您没有显示 getLength(i) 在做什么,我不确定,但看起来您有多个半径非常接近或相同但颜色不同的圆圈。

尝试处理您的数据集 (getLength(i)),这样您就永远不会在与前一个/下一个半径相同的某个小阈值(例如 0.5 像素)内绘制一个圆。这将防止斑点形成。

如果您绝对需要包含所有细节,那么我建议您改用“程序图形”方法。这意味着您使用自己的代码生成图像:

For each (x, y) in the image bounds:
    Compute distance from center
    Find which circles the distance ± 1 pixel is touching
    Set pixel (x, y) to the weighted average of the colors of those circles based on how much of each circle fills the pixel

这将产生一个“完美”的图像,没有过度绘制的伪影。这有效地重新实现了抗锯齿圆绘制,但同时考虑了所有圆,而不是一次一个。

(请注意,您可以通过仅计算圆的 1/8 的像素并将其镜像/旋转以覆盖整个图像来提高效率。)

【讨论】:

  • 听起来很有趣。我会看看这两种方法,但是,切换到程序图形听起来不错。
  • 所以我使用了程序图形的组合,并从图像中删除了任何长度相等的长度,现在看起来非常完美。感谢您的帮助。
猜你喜欢
  • 2012-11-12
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 2020-10-12
  • 2015-02-19
相关资源
最近更新 更多