Made image zoomable and movable
This commit is contained in:
@@ -3,6 +3,10 @@ package com.imegumii.ui;
|
|||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
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.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
@@ -14,6 +18,11 @@ public class GraphImagePanel extends JPanel {
|
|||||||
|
|
||||||
private BufferedImage image;
|
private BufferedImage image;
|
||||||
|
|
||||||
|
private float scale = 1f;
|
||||||
|
private float x = 0f, y = 0f;
|
||||||
|
private Point dragStartScreen;
|
||||||
|
private Point dragEndScreen;
|
||||||
|
|
||||||
public GraphImagePanel(File f)
|
public GraphImagePanel(File f)
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
@@ -22,10 +31,71 @@ public class GraphImagePanel extends JPanel {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
image = ImageIO.read(f);
|
image = ImageIO.read(f);
|
||||||
|
// x = image.getWidth() / 2;
|
||||||
|
// y = image.getHeight() / 2;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
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();
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,17 +108,23 @@ public class GraphImagePanel extends JPanel {
|
|||||||
|
|
||||||
if(image != null){
|
if(image != null){
|
||||||
|
|
||||||
int width = this.getWidth();
|
// int width = this.getWidth();
|
||||||
int height = this.getHeight();
|
// int height = this.getHeight();
|
||||||
|
//
|
||||||
if(image.getWidth() > image.getHeight()) {
|
// if(image.getWidth() > image.getHeight()) {
|
||||||
height = (int)((width * image.getHeight()) / image.getWidth());
|
// height = (int)((width * image.getHeight()) / image.getWidth());
|
||||||
}
|
// }
|
||||||
else {
|
// else {
|
||||||
width = (int) ((height * image.getWidth()) / image.getHeight());
|
// width = (int) ((height * image.getWidth()) / image.getHeight());
|
||||||
}
|
// }
|
||||||
|
AffineTransform at = new AffineTransform();
|
||||||
g2d.drawImage(image, 0,0, width, height, this);
|
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