我正在尝试使用 Java2D 绘制地图。当我的地图缩小时,我的道路上充满了绘画制品。这是绘制完整的美国州时屏幕的一小部分:
放大后,这是一段相似的路段:
使用的线条样式是一条蓝色实线,其宽度缩放为相当于 2 个像素。
我尝试了各种渲染提示和行连接规则,但似乎没有任何帮助。
我在运行 OS/X 10.8 的 Mac 上使用 Open JDK 1.7,这也可以在具有 Sun JDK 1.6 的 Linux 计算机上重现。
Java2D 中的所有形状和变换都尽可能采用双精度。
线条的几何形状有许多间隔很近的点,我怀疑绘图伪影的原因是渲染器被比单个像素更近的连续点弄糊涂了。
有没有办法在不细化点的情况下改善缩小形状的外观?
Edit绘图伪影位于单独的线段相交的点处,因此丢失的像素与线帽(末端)不相交有关,即使端点相同也是如此。该图像显示了两条线段之间的交点。我以 7 像素缩放的线条样式(与白色进行异或运算)突出显示了每个线段,但如果您仔细观察,您仍然可以看到原始蓝线的一部分(这是由于圆角帽重叠和异或绘制模式所致) .)在普通比例下,两端似乎重叠,但是当在普通绘画模式下缩小并返回时,会出现断线效果。
一种解决方法是在绘制所有连续的线段之前将它们连接在一起,但我仍然想知道绘制伪像的真正原因。
我无法重现您使用 OS X 1.6 JDK 的情况,但我仍然有一些建议给您。
如果您只是用它来概述状态,请考虑使用GeneralPath class http://docs.oracle.com/javase/6/docs/api/java/awt/geom/GeneralPath.html。您可以使用lineTo(x,y)
方法来建立线上的每个点。再说一遍,因为我无法使用以下命令重现您的问题Line2D.Double
,我不知道这是否真的会有所不同。
其次,可能更重要的是,你如何放大和缩小。我正在使用一个AffineTransform http://docs.oracle.com/javase/6/docs/api/java/awt/geom/AffineTransform.html (with setScaleTo(x,y)
) on my Graphics2D
对象,一切都进展顺利。与通过缩放因子(或您可以执行的任何其他操作)缩放数据中的点的替代方案相比,这是相当简单的。您还必须按该系数调整线条的笔划,因为它会缩小所有内容。如果您愿意,我可以发布屏幕截图。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)