代码之家  ›  专栏  ›  技术社区  ›  Shakil

无法从JavaFX中的文件选择器路径加载图像[重复]

  •  0
  • Shakil  · 技术社区  · 7 年前

    我正试图显示一个图像文件,只要它是从一个文件选择器选择。文件选择器仅限于.png和.jpg文件,所选文件存储在文件类型的变量中。为此,我已经设置了一个imageview,我希望用这个新文件设置这个图像,唯一的问题是它的类型是file而不是image。

    如何才能做到这一点?目前为止的代码…

    public void fileSelection(){
    
            FileChooser fileChooser = new FileChooser();
            fileChooser.setTitle("Select Profile Picture");
            fileChooser.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("Image Files", "*.png", "*jpg"));
            File selectedFile = fileChooser.showOpenDialog(null);
            File selectedFileInput = selectedFile;
    
            if(selectedFile != null) {
                selectedFileOutput.setText("File selected: " + selectedFile.getName());
                previewPicture.setImage();
            } else {
                selectedFileOutput.setText("Please select a profile picture...");
            }
        }
    
    0 回复  |  直到 9 年前
        1
  •  8
  •   James_D    9 年前

    您只需使用

    Image image = new Image(selectedFile.toURI().toString());
    

    然后把它放在 ImageView :

    previewPicture.setImage(image);
    

    其他构造函数提供了对加载映像所需资源的更多控制。如果要强制图像为特定大小,可以在加载时调整其大小,如果用户选择大图像,但只希望显示缩小的版本,这将节省内存。此外,加载大图像可能需要时间,因此不应将其加载到ui线程上。这个 Image 使用字符串版本的url的构造函数可以选择在后台线程中自动加载图像。下面强制宽度和高度都不超过240像素(同时保持原始纵横比),并在背景中加载图像(因此不会阻塞用户界面):

    Image image = new Image(selectedFile.toURI().toString(),
        240, // requested width
        240, // requested height
        true, // preserve ratio
        true, // smooth rescaling
        true // load in background
    );
    

    documentation 对于其他可用的构造函数。

        2
  •  1
  •   ravthiru    9 年前

    创建图像并设置为 ImageView 如下

      Image image = new Image(new FileInputStream(selectedFile));
      previewPicture.setImage(image);
    
    推荐文章