我正在使用几何变换,一切顺利,但在图像视图中,当我应用变换然后在imageview中更改图像时,新图像获得前一个图像的所有变换 .
i need to reset my image view when i load new image but i din't find any solution searching long time on internet. so how i will do it???
这里是我的Controller.java类代码,我通过它在fxml文件中应用转换和我的ui代码 .
public class Controller {
private double width;
private double height;
private static double translateValueX;
private static double translateValueY;
private double translateFactor=10;
private boolean xAxis = true;
private double rotationAngel = 45;
private double zoomFactor = 1.2;
private static double scaleValueX=1;
private static double scaleValueY=1;
private double scaleFactor=.5;
@FXML
private ImageView imageView = new ImageView();
@FXML
private Label imageLoadText = new Label();
@FXML
private JFXButton loadImageBtn;
@FXML
private JFXButton zoomInBtn;
@FXML
private JFXButton zoomOutBtn;
@FXML
private JFXRadioButton xAxisCheck;
@FXML
private JFXRadioButton yAxisCheck;
@FXML
void loadImage(ActionEvent event) throws FileNotFoundException {
FileChooser fc = new FileChooser();
fc.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("Image File", "*.jpg", "*.jpeg,", "*.png"));
File imagePath = fc.showOpenDialog(null);
if (imagePath != null) {
Image image = new Image(new FileInputStream(imagePath.getAbsolutePath()));
height = image.getHeight();
width = image.getWidth();
imageLoadText.setText(imagePath.getAbsolutePath());
imageView.setImage(image);
}
}
@FXML
void forwardRotation(ActionEvent event) {
imageView.setRotate(imageView.getRotate() + rotationAngel);
}
@FXML
void backwardRotation(ActionEvent event) {
imageView.setRotate(imageView.getRotate() - rotationAngel);
}
@FXML
void zoomIn(ActionEvent event) {
width *= zoomFactor;
height *= zoomFactor;
imageView.setFitWidth(width);
imageView.setFitHeight(height);
if (zoomOutBtn.isDisable())
zoomOutBtn.setDisable(false);
}
@FXML
void zoomOut(ActionEvent event) {
width /= zoomFactor;
height /= zoomFactor;
imageView.setFitWidth(width);
imageView.setFitHeight(height);
if (width / zoomFactor < 50 || height / zoomFactor < 50)
zoomOutBtn.setDisable(true);
}
@FXML
void forwardTranslate(ActionEvent event) {
if (xAxis){
translateValueX += translateFactor;
imageView.setTranslateX(translateValueX);
}
else{
translateValueY += translateFactor;
imageView.setTranslateY(translateValueY);
}
}
@FXML
void backwardTranslate(ActionEvent event) {
if (xAxis){
translateValueX -= translateFactor;
imageView.setTranslateX(translateValueX);
}
else{
translateValueY -= translateFactor;
imageView.setTranslateY(translateValueY);
}
}
@FXML
void axisSelected(ActionEvent event) {
if (xAxisCheck.isSelected())
xAxis = true;
if (yAxisCheck.isSelected())
xAxis = false;
}
@FXML
void forwardScale(ActionEvent event) {
if (xAxis){
scaleValueX += scaleFactor;
imageView.setScaleX(scaleValueX);
}
else{
scaleValueY += scaleFactor;
imageView.setScaleY(scaleValueY);
}
}
@FXML
void backwardScale(ActionEvent event) {
if (xAxis){
scaleValueX -= scaleFactor;
imageView.setScaleX(scaleValueX);
}
else{
scaleValueY -= scaleFactor;
imageView.setScaleY(scaleValueY);
}
}
@FXML
void shearing(ActionEvent event){
Shear shear=new Shear();
shear.setX(0.4);
imageView.getTransforms().add(shear);
}
}