Olá à todos!
Como faço para limitar o tamanho de uma imagem na hora que o usuário for buscar pelo filechooser?
Por exemplo: Só é permitido imagens de 250X250, nem menos nem mais.
Obrigado a todos. :thumbup:
Olá à todos!
Como faço para limitar o tamanho de uma imagem na hora que o usuário for buscar pelo filechooser?
Por exemplo: Só é permitido imagens de 250X250, nem menos nem mais.
Obrigado a todos. :thumbup:
Nunca vi implementação parecida… Acho que isso pode ser complexo… Gostaria de saber e ajudar.
Utilize os filtros do java como aqui: http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html
E no método accept, abra a imagem, busque o tamanho dela (Image.getWidth() e image.getHeight()) e aceite se < 250X250.
Acabei fazendo diferente por achar isto meio complicado e deu certo…
como eu criava um ImageIcon dessa imagem então eu media o tamanho do ImageIcon e se fosse o tamanho válido carregava a imagem no sistema se não dava um alerta e abria o JFileChooser de novo.
Usei a seguinte instrução para pegar as medidas:
seuImageIcon.getIconWidth();
e
seuImageIcon.getIconHeight();
Valeu gente! :thumbup: :thumbup: :thumbup:
Cara…
com um FileFilter voce faria isso e nem mostraria pro usuario as imagens maiores.
import java.io.File;
import javax.swing.*;
import javax.swing.filechooser.*;
/* ImageFilter.java is used by FileChooserDemo2.java. */
public class ImageFilter extends FileFilter {
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
}
String extension = Utils.getExtension(f);
if (extension != null) {
if (extension.equals(Utils.tiff) ||
extension.equals(Utils.tif) ||
extension.equals(Utils.gif) ||
extension.equals(Utils.jpeg) ||
extension.equals(Utils.jpg) ||
extension.equals(Utils.png) || extension.equals(Utils.bmp)) {
BufferedImage img = ImageIO.read(f);
return (img.getWidth() <= 250) && (img.getHeight() <= 250);
} else {
return false;
}
}
return false;
}
//The description of this filter
public String getDescription() {
return "Just Images";
}
}
public class Utils {
public final static String jpeg = "jpeg";
public final static String jpg = "jpg";
public final static String gif = "gif";
public final static String tiff = "tiff";
public final static String tif = "tif";
public final static String png = "png";
public final static String bmp = "bmp";
/*
* Get the extension of a file.
*/
public static String getExtension(File f) {
String ext = null;
String s = f.getName();
int i = s.lastIndexOf('.');
if (i > 0 && i < s.length() - 1) {
ext = s.substring(i+1).toLowerCase();
}
return ext;
}
}
Fai no FileChosser voce passa uma instancia desse FileFilter para filtrar.
Eu tirei essas classes do tutorial da Sun:
http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html
e adaptei.
Mas voce ainda tem a opção de filtrar apenas imagens e depois redimensiona-las.
Gostei da idéia de apenas filtrar e depois redimensionar, como se faz isso?
Mark_Ameba, não consegui entender o seu exemplo.
BufferedImage src = //A imagem selecionada voce pode pegar por exemplo ImageIO.read(arquivoSelecionado);
BufferedImage dest = new BufferedImage(250,250,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = dest.createGraphics();
AffineTransform at = AffineTransform.getScaleInstance(
(double)250/src.getWidth(),
(double)250/src.getHeight());
g.drawRenderedImage(src,at);
//dest agora tem 250x250 pixels e com a imagem redimensionada.
E sobre o exemplo… é para mostrar no FileChooser apenas imagens que tenham aquelas extensões e que sejam menor ou iguais a 250x250.
Se no seu caso voce quer limitar 250x250 por causa do peso da imagem e não por algum espaço que ela ocupe… voce podia fazer um calculo para ver se ela tem a mesma quantidade de pixes mesmo que em outro formato… seria interessante pro usuario inves de colocar uma imagem de 250x250 pixels, uma de 100x625 que tem a mesma quantidade de pixels. ^^
Valeu Mark_Ameba!!! Caiu como uma luva! :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: