java如何填充多边形

时间:2013-05-27 00:23:44

标签: java swing graphics polygon fill

我想知道java现在如何填充他的多边形,我一直在尝试使用扫描线算法等等,现在已经结束了相当失真,所以我自己想知道Java是如何做到的?因为这看起来很清楚,它是否也使用扫描线或者它是一种完全不同的算法? (我试过在源头搜索但是地狱,这是一个迷宫。)

此致

1 个答案:

答案 0 :(得分:1)

Open JDK源是available online。因此,您可以自己查看代码,但是您应该记住,通过查看代码,使用您所看到的自己代码的“灵感”,您可能会受到OpenJDK许可条件的约束,因此除非您愿意为代码使用兼容的许可证,否则不要太近视。

  1. share/classes/java/awt/Graphics.java开始,这是包含您可能会使用的fillPolygon代码的界面。这是一个抽象方法,所以你必须查看实现该接口的类。
  2. share/classes/sun/java2d/SunGraphics2D.java就是其中之一。它只是将fillPolygon调用委托给sun.java2d.pipe.PixelFillPipe对象上的匹配调用。但由于这只是一个界面,你将再次寻找实现。
  3. share/classes/sun/java2d/pipe/BufferedRenderPipe.java是一种可能的实现方式。其fill实现使用fillSpans方法,其核心是在本机代码中实现的。
  4. share/native/sun/java2d/pipe/BufferedRenderPipe.c具有相应的实现。所以,一旦你有了,从查看代码,了解跨度是什么以及如何将多边形转换为跨度,那么可能会告诉你如何渲染跨度。​​
  5. 以上所有内容只是一个可能的代码路径。这在很大程度上取决于您使用的平台以及您要绘制的平台。打印有不同的原语,大多数平台有不同的原语。例如,在(非加速)X11连接上,solaris/native/sun/java2d/x11/X11Renderer.c将简单地委托给XFillPolygon。还有custom code for OpenGL-based graphics,但我刚才看不到填充优化。但仔细观察可能会很好。