【问题标题】:Why GraphicsContext uses methods with double params?为什么 GraphicsContext 使用带有双参数的方法?
【发布时间】:2015-08-14 13:51:15
【问题描述】:

我正在从 swing 转到 javafx。我想知道为什么 GraphicsContext 使用带有双参数的方法。例如fillRect(double x, double y, double w, double h) 不像swing 有方法drawRect(int x, int y, int width, int height)

我应该用双倍计算吗?

【问题讨论】:

  • 最初的 Graphics 类专注于屏幕,Graphics2D 旨在处理精度更高的输出,例如打印机(以及商业打印机)

标签: java swing javafx int double


【解决方案1】:

drawRect 继承自 Graphics,它使用 int 指定坐标和大小。

另一方面,Graphics2D 对象能够处理位于“整个像素之间”的图形值。为了补偿它通常会在渲染的部分渲染抖动像素(在绘图和 BG 颜色之间),它必须处理像素的一小部分。

我应该把所有的计算都加倍吗?

是的!正如您可能对Graphics 方法所期望的那样,将呈现完全等于整数的双精度值 - 线条清晰明了。但是如果形状的边界落在整个像素之间,颜色就会抖动。

【讨论】:

  • 感谢您的回答。所以如果我需要用清晰的边界绘制一些对象,我应该使用 int 参数,在其他情况下使用 double
  • “所以如果我需要绘制一些具有清晰边界的对象,我应该使用 int params” 我不会说这么简单。例如,与其每个边都完全垂直或水平的正方形,不如考虑菱形。菱形的每个点是否为整数值都没有关系,一个点和下一个点之间的大多数值都不是。所以图形对象必须在绘制锯齿线或像素抖动之间做出选择。但最简单的答案是:- 使用双打会产生更好的绘图。
猜你喜欢
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 2019-07-02
  • 2022-08-10
  • 2014-04-03
  • 1970-01-01
  • 2018-12-23
  • 2014-04-07
相关资源
最近更新 更多