【发布时间】:2023-03-07 11:13:02
【问题描述】:
我正在根据给定的线绘制多边形。我的逻辑运行良好,除非多边形看起来与自身相交。但是,它似乎不是 100% 一致的,根据我正在阅读的内容也没有任何意义。下面是使用相同代码创建的两个图像。黄色的多边形是我关心的。
图片:http://i31.tinypic.com/24cxxlf.png
我希望每个案例都像第一个案例一样工作(不填充被多边形“包裹”的空白区域)。
这些图像由以下代码生成:
BufferedImage drawingImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = drawingImage.createGraphics();
Polygon polygon = new Polygon(parsedPoints[0], parsedPoints[1], parsedPoints[0].length);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
g.setColor(drawingColor);
g.fillPolygon(polygon);
float[] scales = {1f, 1f, 1f, 0.7f};
float[] offsets = new float[4];
RescaleOp rop = new RescaleOp(scales, offsets, null);
graphics.drawImage(drawingImage, rop, 0, 0);
graphics.setStroke(new BasicStroke(2));
graphics.setColor(drawingColor);
graphics.drawPolygon(polygon);
(我正在填充多边形,应用重新缩放以获得填充的透明度,然后绘制不透明的边框。)
根据 Graphics.fillPolygon 方法的 Java 文档:
定义了多边形内的区域 使用奇偶填充规则,也 称为交替规则。
如果我理解正确,那么在这两种情况下,包含在由厚多边形“包裹”的区域内的像素将恰好穿过两条路径,因此它将被视为多边形“外部”。
所以我的问题是:(a) 我是否理解奇偶填充规则以及 (b) 在 Java 中有没有办法让第二张图像更像第一张?
对此的任何想法将不胜感激。
谢谢。
【问题讨论】: