Java 在Graphics2D中进行双精度绘图的目的是什么
谁能给我解释一下吗 你不能在像素之间画图,为什么我在画图的时候要使用浮点或双精度测量呢?在甲骨文的文档中写了一些关于打印机设备的东西,但它也不能在最小的点之间绘制。我不明白 让我们说一句简单的话。这条线的宽度设定为1.3f。当它被画上时,会发生什么:Java 在Graphics2D中进行双精度绘图的目的是什么,java,graphics2d,Java,Graphics2d,谁能给我解释一下吗 你不能在像素之间画图,为什么我在画图的时候要使用浮点或双精度测量呢?在甲骨文的文档中写了一些关于打印机设备的东西,但它也不能在最小的点之间绘制。我不明白 让我们说一句简单的话。这条线的宽度设定为1.3f。当它被画上时,会发生什么: 在windows中显示(我相信它有96 DPI) 300 DPI的打印机 AFAIK Java在内部使用72 DPI。那么数学是怎样的呢?我想到了几个用例 您的图形设备可能已缩放。例如,我知道有几个应用程序使用图形上下文的适当比例绘制单位圆的窗口
AFAIK Java在内部使用72 DPI。那么数学是怎样的呢?我想到了几个用例
- 您的图形设备可能已缩放。例如,我知道有几个应用程序使用图形上下文的适当比例绘制单位圆的窗口填充图像,即半径为1的圆
- 您可能正在为面向向量的目标生成输出,如PDF文件。在这种情况下,用户可能会任意放大,甚至在高分辨率下,也可能期望有相当的数量或精度
- 正如您所提到的,打印机可能以比屏幕高得多的分辨率打印,这是由内置的缩放因子实现的,该因子将默认坐标单位映射为设备像素大小的几倍
- 抗锯齿建议使用亚像素分辨率。应用于几何对象边界处给定像素的颜色量将取决于所述对象的子像素坐标
上述任何一项都不会轻易排除使用单精度浮点的可能性,事实上,大多数G2D操作也可以使用浮点。只有在非常大的缩放范围、非常高的精度要求以及类似的应用中,使用双镜头才是重要的。但另一方面,在任何情况下,大多数计算都是在双精度上执行的,并且将这些计算尽可能远地通过图形管道的开销通常可以忽略不计。所以当你问我为什么用double而不是float时,我会问你“为什么不?”谁说一个单位对应一个像素
Graphics2D
包括一个任意的仿射变换
变换,它可以按您喜欢的任何因子放大值。是的,但我也可以缩放整数值。是的,但是像0.1
这样的值可以放大到5.0
,然后,如果您的双精度值最初是在整数之间,则无关紧要;它们现在被放大到了全像素。@LouisWasserman请看上面编辑的问题OK,但是当我使用整数精度绘制半径为5的圆时,在DPI为300的打印机上绘制时会出现什么问题?它只是乘以300/72,不是吗?所以它将是208333333=>21。