Made image zoomable and movable
This commit is contained in:
@@ -3,6 +3,10 @@ package com.imegumii.ui;
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.awt.geom.AffineTransform;
|
||||
import java.awt.geom.NoninvertibleTransformException;
|
||||
import java.awt.geom.Point2D;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.IOException;
|
||||
import java.io.*;
|
||||
@@ -14,6 +18,11 @@ public class GraphImagePanel extends JPanel {
|
||||
|
||||
private BufferedImage image;
|
||||
|
||||
private float scale = 1f;
|
||||
private float x = 0f, y = 0f;
|
||||
private Point dragStartScreen;
|
||||
private Point dragEndScreen;
|
||||
|
||||
public GraphImagePanel(File f)
|
||||
{
|
||||
super();
|
||||
@@ -22,10 +31,71 @@ public class GraphImagePanel extends JPanel {
|
||||
|
||||
try {
|
||||
image = ImageIO.read(f);
|
||||
// x = image.getWidth() / 2;
|
||||
// y = image.getHeight() / 2;
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
addMouseWheelListener(new MouseAdapter() {
|
||||
|
||||
@Override
|
||||
public void mouseWheelMoved(MouseWheelEvent e) {
|
||||
// System.out.println("Scrolled" + scale);
|
||||
double delta = 0.05f * e.getPreciseWheelRotation();
|
||||
scale += delta;
|
||||
revalidate();
|
||||
repaint();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
addMouseMotionListener(new MouseMotionListener() {
|
||||
@Override
|
||||
public void mouseDragged(MouseEvent e) {
|
||||
dragEndScreen = e.getPoint();
|
||||
double dx = dragEndScreen.getX() - dragStartScreen.getX();
|
||||
double dy = dragEndScreen.getY() - dragStartScreen.getY();
|
||||
x += dx;
|
||||
y += dy;
|
||||
dragStartScreen = dragEndScreen;
|
||||
dragEndScreen = null;
|
||||
repaint();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseMoved(MouseEvent e) {
|
||||
}
|
||||
});
|
||||
|
||||
addMouseListener(new MouseListener() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
dragStartScreen = e.getPoint();
|
||||
dragEndScreen = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent e) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited(MouseEvent e) {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
repaint();
|
||||
}
|
||||
|
||||
@@ -38,17 +108,23 @@ public class GraphImagePanel extends JPanel {
|
||||
|
||||
if(image != null){
|
||||
|
||||
int width = this.getWidth();
|
||||
int height = this.getHeight();
|
||||
|
||||
if(image.getWidth() > image.getHeight()) {
|
||||
height = (int)((width * image.getHeight()) / image.getWidth());
|
||||
}
|
||||
else {
|
||||
width = (int) ((height * image.getWidth()) / image.getHeight());
|
||||
}
|
||||
|
||||
g2d.drawImage(image, 0,0, width, height, this);
|
||||
// int width = this.getWidth();
|
||||
// int height = this.getHeight();
|
||||
//
|
||||
// if(image.getWidth() > image.getHeight()) {
|
||||
// height = (int)((width * image.getHeight()) / image.getWidth());
|
||||
// }
|
||||
// else {
|
||||
// width = (int) ((height * image.getWidth()) / image.getHeight());
|
||||
// }
|
||||
AffineTransform at = new AffineTransform();
|
||||
g.drawLine(-1000, 0, 1000, 0);
|
||||
g.drawLine(0, -1000, 0, 1000);
|
||||
at.scale(1, -1);
|
||||
at.setToTranslation(x, y);
|
||||
at.scale(scale, scale);
|
||||
g2d.drawImage(image, at, this);
|
||||
// g2d.drawImage(image, 0,0, width, height, this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user