He estado tratando de averiguar cómo voltear una imagen por un tiempo, pero no he averiguado todavía.

Estoy usando Graphics2D para dibujar un Image con

g2d.drawImage(image, x, y, null)

Solo necesito una forma para voltear la imagen en el eje horizontal o vertical.

Si quieres puedes echar un vistazo a la completa de la fuente en github.

  • En lugar de tener que veamos toda su origen, hacer un SSCCE.
  • Si buscas en google «Graphics2D girar imagen» vas a encontrar un montón de tutoriales
InformationsquelleAutor Fuze | 2012-03-04

5 Comentarios

  1. 54

    De http://examples.javacodegeeks.com/desktop-java/awt/image/flipping-a-buffered-image:

    //Flip the image vertically
    AffineTransform tx = AffineTransform.getScaleInstance(1, -1);
    tx.translate(0, -image.getHeight(null));
    AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
    image = op.filter(image, null);
    
    
    //Flip the image horizontally
    tx = AffineTransform.getScaleInstance(-1, 1);
    tx.translate(-image.getWidth(null), 0);
    op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
    image = op.filter(image, null);
    
    //Flip the image vertically and horizontally; equivalent to rotating the image 180 degrees
    tx = AffineTransform.getScaleInstance(-1, -1);
    tx.translate(-image.getWidth(null), -image.getHeight(null));
    op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
    image = op.filter(image, null);
  2. 28

    La más fácil manera de voltear la imagen es negativa y a escalar.
    Ejemplo:

    g2.drawImage(image, x + width, y, -width, height, null);

    Que voltear horizontalmente. Esto le dará la vuelta verticalmente:

    g2.drawImage(image, x, y + height, width, -height, null);
    • Esto es casi buena. Debe ser como g2.drawImage(imagen, x+altura, y, anchura, altura, null); la razón de esto es porque la escala negativa se mueva la imagen a la izquierda, así que usted tiene que compensar este movimiento.
    • Sí +1 @T. G para equilibrar la negatividad.
    • Creo que esto es más eficaz que el uso de AffineTransform. Que alguien me corrija si estoy equivocado. (+1)
  3. 3

    Puede utilizar una transformación en su Graphics, que debe girar la imagen bien. A continuación se muestra un ejemplo de código que puede utilizar para lograr este:

    AffineTransform affineTransform = new AffineTransform(); 
    //rotate the image by 45 degrees 
    affineTransform.rotate(Math.toRadians(45), x, y); 
    g2d.drawImage(image, m_affineTransform, null); 
  4. 0

    Girar Imagen Vertical De 180 Grados

    File file = new File(file_Name);
    FileInputStream fis = new FileInputStream(file);  
    BufferedImage bufferedImage = ImageIO.read(fis); //reading the image file         
    AffineTransform tx = AffineTransform.getScaleInstance(-1, -1);
    tx.translate(-bufferedImage.getWidth(null), -bufferedImage.getHeight(null));
    AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
    bufferedImage = op.filter(bufferedImage, null);
    ImageIO.write(bufferedImage, "jpg", new File(file_Name));
  5. 0

    Usted necesita saber el ancho y alto de la imagen para asegurarse de que la escala adecuada:

    int width = image.getWidth(); int height = image.getHeight();

    Entonces, usted necesita para dibujar:

    //Flip the image both horizontally and vertically
    g2d.drawImage(image, x+(width/2), y+(height/2), -width, -height, null);
    //Flip the image horizontally
    g2d.drawImage(image, x+(width/2), y-(height/2), -width, height, null);
    //Flip the image vertically
    g2d.drawImage(image, x-(width/2), y+(height/2), width, -height, null);

    Esta es la forma en que lo hacen, de todos modos.

Dejar respuesta

Please enter your comment!
Please enter your name here