Resultados 1 al 3 de 3

Sobre swing y awt e imagenes

  1. #1 Sobre swing y awt e imagenes 
    Iniciado
    Fecha de ingreso
    Nov 2001
    Ubicación
    Teruel
    Mensajes
    9
    Descargas
    0
    Uploads
    0
    Hola a todos.

    Estoy haciendo un proyecto en la universidad con java con el eclipse utilizando los paquetes swing y awt.

    Vereis en este proyecto tengo que insertar imagenes y bueno para esto he creao un jLabel y simplemente le he pasao la imagen como ImageIcon a la constructora y asi aparece bien la imagen. Pero el problema que tengo es que ahora necesito rotar la imagen y he buscao entre lo metodos de la clase ImageIcon o Image o Graphics y nada y como que estoy bloqueao con esto.

    A ver si alguien a tenido alguna experiencia parecida con esto y como lo ha podido implementar.

    Muchas Gracias.
    Citar  
     

  2. #2  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    Buenas! Lo que estás buscando es realizar una transformación afín (rotación) sobre una imagen. La imagen rotada será una versión transformada de la imagen fuente. Te digo ésto porque es distinto aplicar una transformación a un objeto Graphics2D y después renderizarlo, a ésto.

    Bueno creo que no me voy a extender demasiado... Sólo comentarte brevemente el procedimiento: Cargamos la imagen en un Stream, Suponiendo que la imagen a cargar sea JPEG, usaremos la clase JPEGImageDecoder y BufferedImage, si no, siempre puedes llamar al método estático de la clase ToolKit: Toolkit.getDefaultToolkit().getImage("la_imagen.jp g");. A continuación creas un objeto AffineTransform, para llamar al método que rotará la imagen el ángulo que le indiquemos. Creas un objeto RenderingHints para indicar qué algoritmo vamos a usar para la aproximación del color de cada pixel, en este caso "bilineal". Nos queda convertir a un objeto AffineTransformOp, para ello lo creamos pasándole como parámetro al constructor el objeto AffineTransform, y por último sólo nos queda dibujarlo... llamando al método drawImage del objeto Graphics2D:

    public void paint(Graphics g) {
    Graphics2D g2 = (Graphics2D)g;
    try {
    InputStream in = getClass().getResourceAsStream("la_imagen.jpg");
    JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
    BufferedImage image = decoder.decodeAsBufferedImage();
    // Aqui se realiza la transformación (rotación de 45 grados en sentido horario, por ejemplo)
    AffineTransform at = AffineTransform.getRotateInstance(Math.PI/4);
    RenderingHints rh = new RenderingHints(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    AffineTransformOp atop = new AffineTransformOp(at,rh);
    BufferedImage destino = atop.filter(image, null);

    g2.drawImage(destino,0,20,this);
    in.close();
    }
    catch (IOException e) {e.printStackTrace();}
    catch (ImageFormatException e) {e.printStackTrace();}
    }
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

  3. #3  
    Iniciado
    Fecha de ingreso
    Nov 2001
    Ubicación
    Teruel
    Mensajes
    9
    Descargas
    0
    Uploads
    0
    Muchas gracias por contestar.

    Hoy lo he implementado en clase y funciona pero no he utilizado exactamente ese algoritmo. He utlizado este que he encontrado.

    public ImageIcon rotateIcon(ImageIcon icon, int angle) {
    int w = icon.getIconWidth();
    int h = icon.getIconHeight();
    int type = BufferedImage.TYPE_INT_RGB; // other options, see api
    BufferedImage image = new BufferedImage(h, w, type);
    Graphics2D g2 = image.createGraphics();
    double x = (h - w) / 2.0;
    double y = (w - h) / 2.0;
    AffineTransform at = AffineTransform.getTranslateInstance(x, y);
    at.rotate(Math.toRadians(angle), w / 2.0, h / 2.0);
    g2.drawImage(icon.getImage(), at, this);
    g2.dispose();
    return icon = new ImageIcon(image);
    }

    Este me ha servido a la primera ya que al devolver un ImageIcon simplemente le hacia un setIcon() al Jlabel con la imagen que devuelve esta funcion. En la que tu me pones no entiendo bien el parametro de g que hay que pasarle. Es que no tengo mucha experiencia con estos paquetes de java.

    Muchas gracias.
    Citar  
     

Temas similares

  1. Problema con imagenes
    Por v0r0! en el foro JUEGOS
    Respuestas: 0
    Último mensaje: 05-03-2009, 00:53
  2. duda imagenes
    Por kamsky en el foro WINDOWS
    Respuestas: 28
    Último mensaje: 01-07-2006, 04:33
  3. Imagenes ISO
    Por Nithael en el foro LINUX - MAC - OTROS
    Respuestas: 2
    Último mensaje: 11-01-2004, 18:07
  4. Swing
    Por victorc90 en el foro GENERAL
    Respuestas: 2
    Último mensaje: 18-10-2003, 14:11

Marcadores

Marcadores