我正在使用JAVA swing进行我的个人项目。放大affinetransform swing
该项目是关于在窗口上绘制地图。
该地图是可缩放的使用的AffineTransform。 我在这里的问题是,每当我或缩小地图也转移,而不是输入/输出缩放在地图上的点是在屏幕的中央
private void updateAT()
{
Dimension d = panel.getSize();
int panelW = d.width;
int panelH = d.height;
Rectangle2D r = regionList[0].get("Victoria").getShape().getBounds2D();
scaleX = (panelW/r.getWidth()) * zoom;
scaleY = (panelH/r.getHeight()) * zoom;
AffineTransform goToOrigin = AffineTransform.getTranslateInstance(-r.getMinX(), -r.getMinY());
AffineTransform pan = AffineTransform.getTranslateInstance(panX, panY);
AffineTransform scaleAndFlip = AffineTransform.getScaleInstance(scaleX, -scaleY);
//AffineTransform mirror_y = new AffineTransform(1, 0, 0, -1, 0, panelH);
AffineTransform centre = AffineTransform.getTranslateInstance(panelW/2, panelH/2);
centre.translate(-((r.getWidth()*scaleX)/2), ((r.getHeight()*scaleY)/2));
world2pixel.setToIdentity();
//world2pixel.concatenate(mirror_y);
world2pixel.concatenate(pan);
world2pixel.concatenate(centre);
world2pixel.concatenate(scaleAndFlip);
world2pixel.concatenate(goToOrigin);
}
我不确定这是否可以解决问题,但我会使用单个转换并对其应用每个操作,而不是在最后将它连接起来,我也会玩弄顺序。看一下'AffineTransform#translate'和'AffineTransform#scale' ...这么多翻译可能不是一个好主意:P – MadProgrammer
为了实现这个,有必要连接几个变换。 1)将“中心”移动到原点。 2)缩放大小。 3)将其移回原始中心点。或者与@MadProgrammer相似:) –
@AndrewThompson我对'AffineTransform'的经验相当有限(对'getScaledInstance'或'getRotateInstance'),所以请随意阐述;) – MadProgrammer