2016-10-19 2 views
3

Je tente d'afficher un fichier image dès qu'il est sélectionné dans un sélecteur de fichiers. Le sélecteur de fichier est limité aux fichiers .png et .jpg avec les fichiers sélectionnés stockés dans une variable de type Fichier. Pour ce faire, j'ai mis en place un ImageView, et je souhaite définir l'image avec ce nouveau problème seulement de fichier est de type Fichier pas Image.Comment convertir un fichier en image pour l'afficher dans ImageView en java?

Comment cela peut-il être réalisé? Code jusqu'à présent ...

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..."); 
     } 
    } 

Répondre

6

Vous pouvez simplement créer une image avec

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

puis placez-le dans le ImageView:

previewPicture.setImage(image); 

D'autres constructeurs offrent plus de contrôle sur les ressources requises pour le chargement de l'image. Si vous voulez forcer l'image à une certaine taille, vous pouvez la redimensionner au chargement, ce qui économisera de la mémoire si l'utilisateur choisit une grande image mais que vous voulez seulement afficher une version réduite. De plus, le chargement d'une grande image peut prendre du temps, vous ne devez donc pas le charger sur le thread de l'interface utilisateur. Les constructeurs Image prenant des versions de chaîne d'URL ont des options pour charger automatiquement l'image dans un thread d'arrière-plan. Les forces suivant la largeur et la hauteur à la fois pas plus de 240 pixels (tout en maintenant le rapport d'aspect d'origine), et charge l'image en arrière-plan (donc pas de blocage de l'interface):

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

Voir la documentation pour autres constructeurs disponibles.

1

Vous créez l'image et réglée sur la ImageView comme suit

Image image = new Image(new FileInputStream(selectedFile)); 
    previewPicture.setImage(image);