¿Cómo convertir un archivo a imagen para mostrar en ImageView en Java?
javafx filechooser (2)
Estoy tratando de mostrar un archivo de imagen tan pronto como se selecciona de un selector de archivos. El selector de archivos está restringido a archivos .png y .jpg con los archivos seleccionados almacenados en una variable de tipo Archivo. Para hacer esto, configuré un ImageView, y deseo configurar la imagen con este nuevo archivo. El único problema es que es del tipo Archivo, no Imagen.
¿Cómo se puede lograr esto? Código hasta ahora ...
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...");
}
}
Simplemente puede crear una imagen con
Image image = new Image(selectedFile.toURI().toString());
y luego colóquelo en
ImageView
:
previewPicture.setImage(image);
Otros constructores ofrecen más control sobre los recursos necesarios para cargar la imagen.
Si desea forzar que la imagen tenga un tamaño determinado, puede cambiar su tamaño al cargarla, lo que ahorrará memoria si el usuario elige una imagen grande pero solo desea mostrar una versión reducida.
Además, cargar una imagen grande puede llevar tiempo, por lo que no debe cargarla en el hilo de la interfaz de usuario.
Los constructores de
Image
toman versiones en cadena de URL tienen opciones para cargar automáticamente la imagen en un hilo de fondo.
Lo siguiente fuerza que el ancho y la altura no sean más de 240 píxeles (manteniendo la relación de aspecto original), y carga la imagen en el fondo (por lo tanto, no bloquea la interfaz de usuario):
Image image = new Image(selectedFile.toURI().toString(),
240, // requested width
240, // requested height
true, // preserve ratio
true, // smooth rescaling
true // load in background
);
Consulte la documentation para otros constructores disponibles.
Usted crea una imagen y la establece en
ImageView
siguiente manera
Image image = new Image(new FileInputStream(selectedFile));
previewPicture.setImage(image);