在Graphics2D中进行双精度绘图的目的是什么?

时间:2012-12-11 21:36:48

标签: java graphics2d

有人可以向我解释一下吗?

你不能在像素之间绘制,所以为什么我在绘图时应该使用浮点数还是双倍测量值?在Oracle的文档中写了一些关于打印机设备的东西,但它也无法在最小的点之间绘制。我不明白。

让我们说一个简单的路线。这条线的宽度设置为1.3f。当它被绘制时发生了什么:

  1. 在Windows中显示(我相信它有96 DPI)?
  2. 300 DPI的打印机?
  3. AFAIK Java内部使用72 DPI。那数学怎么样?

1 个答案:

答案 0 :(得分:0)

我想到了几个用例。

  • 您的图形设备可能会缩放。例如,我知道几个应用程序使用适当的图形上下文缩放来绘制单位圆的窗口填充图像,即半径为1的圆。
  • 您可能正在为面向矢量的目标生成输出,例如PDF文件。在这种情况下,用户可能会随意放大,即使在高分辨率下也可能会有相当的数量或精度。
  • 打印机,就像你提到的那样,可能会以比屏幕高得多的分辨率进行打印,这是通过将默认坐标单位映射到设备像素大小的几倍的内置缩放系数来实现的。
  • 消除锯齿建议使用子像素分辨率。在几何对象的边界处应用于给定像素的颜色量将取决于所述对象的子像素坐标。

以上都不会轻易排除使用单精度浮点数,实际上大多数G2D操作也可以使用浮点数。使用双精度对于真正大的变焦,对精度和类似应用的强烈要求非常重要。但另一方面,大多数计算在任何情况下都在双打上执行,并且通过图形管道尽可能地承载这些计算的开销通常可以忽略不计。所以当你问我为什么要使用double而不是float时,我问你“为什么不呢?”