我正在使用 Java Graphics2D 生成这张地图,上面有某种着色的红色叠加层。如您所见,叠加层沿左侧的图像边界被切断:-
在向我的项目利益相关者演示后,他们想要的是让这个叠加层沿着地图边界剪辑,并在其周围进行一些一致的填充。这样做的简单原因是让用户知道叠加层延伸到地图之外。
所以,我最初的想法是通过创建另一个更大的地图作为“饼干切割机”来执行“缩放和移位”,这是我的简化代码:-
// polygon of the map
Polygon minnesotaPolygon = ...;
// convert polygon to area
Area minnesotaArea = new Area();
minnesotaArea.add(new Area(minnesotaPolygon));
// this represents the whole image
Area wholeImageArea = new Area(new Rectangle(mapWidth, mapHeight));
// zoom in by 8%
double zoom = 1.08;
// performing "zoom and shift"
Rectangle bound = minnesotaArea.getBounds();
AffineTransform affineTransform = new AffineTransform(g.getTransform());
affineTransform.translate(-((bound.getWidth() * zoom) - bound.getWidth()) / 2,
-((bound.getHeight() * zoom) - bound.getHeight()) / 2);
affineTransform.scale(zoom, zoom);
minnesotaArea.transform(affineTransform);
// using it as a cookie cutter
wholeImageArea.subtract(minnesotaArea);
g.setColor(Color.GREEN);
g.fill(wholeImageArea);
我用绿色填充外部部分的原因是让我看看饼干切割器是否正确实施。结果如下:-
如您所见,“缩放和移位”在这种情况下不起作用。右下角绝对没有填充。然后,我意识到这种技术不适用于不规则的形状,比如地图……它只适用于更简单的形状,比如正方形、圆形等。
我想要的是在裁剪其余部分之前在地图周围创建一致的填充/边距。为了确保您理解我在这里所说的内容,我在下面对这张图片进行了 photoshop 处理(尽管做得不好),以解释我在这里要完成的工作:-
我不知道如何从这里开始,我希望你们能给我一些指导。
谢谢。