首先,我将描述情况:我之前在算法中创建了一个大图像(在ImageView中)。现在,我需要旋转来裁剪(通过鼠标进行矩形选择)。
现在我设置了一个问题:我无法在旋转的图像上进行矩形选择。在我旋转图像之前,一切都很好,但是当我旋转图像时,鼠标单击的坐标保持旋转(矩形的鼠标拖动很有趣:D)
基本代码:
ScrollPane sp = new ScrollPane(); // with fitWidth and fitHeight
ImageView imgView= new ImageView(realyBigImage); //image is diferent but can be big, 5000x10000 px
VBox vb = new VBox(imgView);
HBox hb = new HBox(vb); // VBox nad Hbox both have Align = Pos.Center;
sp.setContent(imgV);
出现HBox和VBOX是因为这是唯一在sp中心获取imgV的方法(没有sp.setVvalue(0.5)和sp.setHvalue(0.5)有效)。
我在侧栏滑块事件上有旋转和缩放功能,例如:
sliderZoom.valueProperty().addListener((obsValue, oldVal, newVal) -> {
imgView.setPreserveRatio(true);
imageView.setFitHeight(imgViewBaseHeight * newValue);
imageView.setFitWidth(imgViewBaseWidth * newValue); //img is huge and thanks to this i don't have to use .setScale (which won't start scrollPanes Bars appears)
}
sliderRotate.valueProperty().addListener((obsValue, oldVal, newVal) -> {
imageView.setRotate(newVal); // slider has 0-359 value
}
我在imgView上也有用于单击,拖动和释放绘制矩形的事件(简单的x = event.getX()等等)。
我可以在图像上绘制矩形(在其下保持scrollPane的坐标),但是然后我无法裁剪选定区域(图像中没有有效的相对坐标,但在窗格中是绝对坐标)。
旋转整个imageView或旋转绘制矩形都没关系(我不确定该怎么做)。
我有一个想法,要绘制透明的矩形,然后使矩形。snapshot(...),但这是一个主意,我不知道它是否需要在它下面的imageView或我只得到白色矩形(我有这个晚上的想法,几个小时后我会尝试的。)
这是最简单的方法吗?