Hola que tal a todos tengo un problema con el tratamiento de imágenes en java. Logro levantar la imagen, logro hacerle zoom, pero no logro rotar tal imagen a partir de un botón a continuación adjunto el código:
public class MostrarImprimir extends Applet {
private JPanel centerPanel;
Image imagen;
Image imagen1;
ImagePanel imagefondo;
private ImagePanel selected = null;
private Dimension tamañoPantalla = Toolkit.getDefaultToolkit().getScreenSize();
int zoomHabilitado;
private ZoomAction zoomAction;
private RotarIz rotariz;
private RotarDe rotarde;
private ImprimirAction imprimirAction;
@Override
public void init() {
String ruta = /*getParameter(*/ "c:\\Scanner\\4.jpg"/*"dir")*/;
JFrame frame = new JFrame("Impresión");
init2(frame.getContentPane());
//Para Cambiar icono del frame
ImageIcon logo;
logo = new ImageIcon(getClass().getResource("/resources/logo.png"));
frame.setIconImage(logo.getImage());
//Fin Cambio de logo Frame
frame.setDefaultCloseOperation(WindowConstants.EXI T_ON_CLOSE);
frame.setSize((int) (tamañoPantalla.getWidth() / 2.5), (int) (tamañoPantalla.getHeight() / 1.04));
//frame.set
frame.setResizable(false);
frame.setVisible(true);
try {
imagen = ImageIO.read(new File(ruta));
//Esta linea redimenciona la imagen original
imagen1 = imagen.getScaledInstance(724, 1024, Image.SCALE_AREA_AVERAGING);
} catch (IOException ex) {
System.out.println("No lee imagen");
Logger.getLogger(MostrarImprimir.class.getName()). log(Level.SEVERE, null, ex);
}
imagefondo = new ImagePanel(imagen1);
centerPanel.add(imagefondo);
int sizefondo = (int) Math.round(Math.sqrt(centerPanel.getComponentCount ()));
centerPanel.setLayout(new GridLayout(sizefondo, sizefondo));
centerPanel.validate();
imagefondo = new ImagePanel(imagen);
//centerPanel.add(imagefondo);
int sizefondooculto = (int) Math.round(Math.sqrt(centerPanel.getComponentCount ()));
centerPanel.setLayout(new GridLayout(sizefondooculto, sizefondooculto));
centerPanel.validate();
}
public void init2(Container container) {
//Para cambiar la apariencia del Frame
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf. nimbus.NimbusLookAndFeel");
} catch (ClassNotFoundException ex) {
Logger.getLogger(MostrarImprimir.class.getName()). log(Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(MostrarImprimir.class.getName()). log(Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(MostrarImprimir.class.getName()). log(Level.SEVERE, null, ex);
} catch (UnsupportedLookAndFeelException ex) {
Logger.getLogger(MostrarImprimir.class.getName()). log(Level.SEVERE, null, ex);
}
//Fin Cambio apariencia
// Image imagencabeceraoriginal = Toolkit.getDefaultToolkit().createImage(MostrarImp rimir.class.getClassLoader().getResource("Logo VM.png"));
// imagencabeceraoriginal = imagencabeceraoriginal.getScaledInstance((int) (tamañoPantalla.getWidth() / 3), (int) ((tamañoPantalla.getWidth() / 3) * 0.2), 0);
// ImageIcon imagencabecera = new ImageIcon();
// imagencabecera.setImage(imagencabeceraoriginal);
//JLabel cabecera = new JLabel(imagencabecera);
JToolBar toolbar = new JToolBar();
JButton imprimirButton = new JButton(imprimirAction = new ImprimirAction());
ImageIcon iconoprint = new ImageIcon(MostrarImprimir.class.getClassLoader().g etResource("print.png"));
imprimirButton.setIcon(iconoprint);
imprimirButton.setToolTipText("Imprimir");
toolbar.add(imprimirButton);
toolbar.addSeparator();
JButton zoomButton = new JButton(zoomAction = new ZoomAction());
ImageIcon iconozoom = new ImageIcon(MostrarImprimir.class.getClassLoader().g etResource("lupa.png"));
zoomButton.setIcon(iconozoom);
zoomButton.setToolTipText("Habilitar o deshabilitar la herramienta de Zoom");
zoomAction.setEnabled(true);
toolbar.add(zoomButton);
toolbar.addSeparator();
//Boton Rotar Izquierda
JButton rotarizButton = new JButton(rotariz = new RotarIz());
ImageIcon rotarizzoom = new ImageIcon(MostrarImprimir.class.getClassLoader().g etResource("rotariz.png"));
rotarizButton.setIcon(rotarizzoom);
rotarizButton.setToolTipText("Rotar Izquierda");
rotariz.setEnabled(true);
toolbar.add(rotarizButton);
toolbar.addSeparator();
//Boton Rotar Derecha
JButton rotardeButton = new JButton(rotarde = new RotarDe());
ImageIcon rotardezoom = new ImageIcon(MostrarImprimir.class.getClassLoader().g etResource("rotarder.png"));
rotardeButton.setIcon(rotardezoom);
rotardeButton.setToolTipText("Rotar Derecha");
rotarde.setEnabled(true);
toolbar.add(rotardeButton);
toolbar.addSeparator();
toolbar.add(Box.createHorizontalGlue());
container.add(toolbar, BorderLayout.NORTH);
container.add(centerPanel = new JPanel(), BorderLayout.CENTER);
// container.add(cabecera, BorderLayout.SOUTH);
}
private class ImagePanel extends JPanel implements Printable, MouseMotionListener {
private Image image;
int imageWidth;
int imageHeight;
int x = 0;
int y = 0;
double zoom = 0;
int movex = 0, movey = 0;
private MouseListener mouseListener = new MouseListener();
private boolean arrastrando = false;
private int xAnteriorRaton;
private int yAnteriorRaton;
ImagePanel(Image image) {
this.image = image;
imageWidth = image.getWidth(null);
imageHeight = image.getHeight(null);
addMouseListener(mouseListener);
addMouseMotionListener(this);
}
public Image getImage() {
return image;
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D) g;
int panelWidth = getWidth();
int panelHeight = getHeight();
double horizontalRatio = (double) panelWidth / imageWidth;
double verticalRatio = (double) panelHeight / imageHeight;
if (horizontalRatio > verticalRatio) {
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATI ON, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2.drawImage(image, (int) ((panelWidth - imageWidth * verticalRatio) / 2 + 3) + x, 3 + y,
(int) ((imageWidth * verticalRatio) + (imageWidth * verticalRatio * zoom)), (int) ((imageHeight * verticalRatio) + (imageHeight * verticalRatio * zoom)), this);
} else {
//no entra acá
g.drawImage(image, x, y, (int) ((imageWidth * horizontalRatio) + (imageWidth * horizontalRatio * zoom)), (int) ((imageHeight * horizontalRatio) + (imageHeight * horizontalRatio * zoom)), this);
}
}
@Override
public int print(Graphics g, PageFormat f, int pageIndex) throws PrinterException {
if (pageIndex > 0) {
return NO_SUCH_PAGE;
}
Graphics2D g2d = (Graphics2D) g;
g2d.translate(f.getImageableX(), f.getImageableY());
try {
g.drawImage(image, 0, 0, (int) f.getImageableWidth(), (int) f.getImageableHeight(), selected);
g2d = (Graphics2D) g;
g2d.translate(f.getImageableX(), f.getImageableY());
} catch (Exception e) {
System.out.println("Problema con la impresion del archivo");
JOptionPane.showMessageDialog(centerPanel, "Ha ocurrido un error al intentar imprimir el documento.");
}
return PAGE_EXISTS;
}
@Override
public void mouseDragged(MouseEvent e) {
if ((x != 0) || (y != 0) || (movex != 0) || (movey != 0) || (zoom != 0)) {
if (!arrastrando) {
xAnteriorRaton = e.getX();
yAnteriorRaton = e.getY();
arrastrando = true;
centerPanel.setCursor(Cursor.getPredefinedCursor(C ursor.HAND_CURSOR));
} else {
centerPanel.setCursor(Cursor.getPredefinedCursor(C ursor.HAND_CURSOR));
x = (x + e.getX()) - xAnteriorRaton;
y = (y + e.getY()) - yAnteriorRaton;
xAnteriorRaton = e.getX();
yAnteriorRaton = e.getY();
repaint();
}
}
}
@Override
public void mouseMoved(MouseEvent e) {
arrastrando = false;
}