【发布时间】:2021-11-13 14:55:05
【问题描述】:
我正在开发一个追踪程序,将点放置在 X 射线上的解剖点上。我的问题是,我试图放大我的 X 射线图像 (Imageview),而我的鼠标悬停在它上面并显示在另一个 Imageview 中。我希望我的鼠标在它周围创建一个虚拟矩形并在移动时保持在中心并将实时图像传输到其他小Imageview,到目前为止我已经这样做了,但是有一些小故障。我的矩形没有完全按照我的鼠标移动,当我移动到角落时,故障加速,你有什么建议?我正在分享我的错误和代码以澄清所有这些事情。
也许我应该创建一个矩形并将其放置在鼠标位置周围并实时裁剪图像,适合zoomedImageview,并一直显示,但我被困在了这个。
主要问题是,鼠标位置和zoomedImageview的中心位置必须一直重合。
Xray Imageview Fitwidth-height 为 800x800 zoomedImageview Fitwidth-height 为 250x250
public class DrawingController {
@FXML
ImageView xrayImage;
@FXML
ImageView zoomedImage;
public void initialize()
{
xrayImage.setOnMouseMoved(e -> { //HOVERING ON XRAY
PixelReader reader = XrayImageview.getImage().getPixelReader();
WritableImage newImage = new WritableImage(reader,
(int) e.getX(), //x and y is picked according to hovering mouse position
(int) e.getY(),
(int) 250, // 250x250 rectangle is requested.
(int) 250);
zoomedImage.setImage(newImage); // Displaying zoomed image
});
}}
我的 FXML 文件是:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="913.0" prefWidth="1238.0" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1" fx:controller="main.java.controllers.DrawingController">
<children>
<ImageView fitHeight="800.0" fitWidth="800.0" layoutX="418.0" layoutY="33.0" pickOnBounds="true" preserveRatio="true" fx:id="xrayImage">
<image>
<Image url="@threatCare.png" />
</image>
</ImageView>
<ImageView fx:id="zoomedImage" fitHeight="250.0" fitWidth="250.0" layoutX="108.0" layoutY="433.0" pickOnBounds="true" preserveRatio="true" />
</children>
</AnchorPane>
还有主类:
package main.java;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import main.java.database.DatabaseCreator;
import javax.swing.text.html.ImageView;
import java.awt.*;
public class Runner extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("../resources/DrawingPanel.fxml"));
primaryStage.setTitle("TreatCare Software Systems");
Scene scene = new Scene(root,1200,950);
primaryStage.setScene(scene);
primaryStage.setMinWidth(1200);
primaryStage.setMinHeight(950);
primaryStage.setMaximized(true);
primaryStage.setOnCloseRequest( e -> SystemClose());
primaryStage.show();
}
private void SystemClose(){
System.exit(0);
}
public static void main(String[] args){
launch(args);
}
}
【问题讨论】:
-
İ 只是想根据我悬停的鼠标位置放大我的图像视图。我认为代码很清楚理解,我不知道你到底在寻找什么对不起我的无知@kleopatra
-
并且您希望 me 编写样板来重现 您的 问题? *tsss ...请阅读参考的帮助页面并采取相应措施。并在公开展示 java 代码时遵守 java 命名约定。
-
@kleopatra 我刚刚编辑了我的分享,如果你能帮助我,我将不胜感激,这个算法有一些故障,我不知道为什么,我很抱歉我的表达方式
标签: java javafx hover zooming crop