1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.net.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.event.*;
import net.atos.graphics.Circle;
public class ZoomTest
{
public static void main(String[] args)
{
ImagePanel panel = new ImagePanel();
ImageZoom zoom = new ImageZoom(panel);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(zoom.getUIPanel(), "North");
f.getContentPane().add(new JScrollPane(panel));
f.setSize(400,400);
f.setLocation(200,200);
f.setVisible(true);
}
}
class ImagePanel extends JPanel
{
BufferedImage image;
double scale;
public ImagePanel()
{
loadImage();
scale = 1.0;
setBackground(Color.black);
}
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BICUBIC);
int w = getWidth();
int h = getHeight();
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
double x = (w - scale * imageWidth)/2;
double y = (h - scale * imageHeight)/2;
AffineTransform at = AffineTransform.getTranslateInstance(x,y);
at.scale(scale, scale);
g2.drawRenderedImage(image, at);
}
/**
* For the scroll pane.
*/
public Dimension getPreferredSize()
{
int w = (int)(scale * image.getWidth());
int h = (int)(scale * image.getHeight());
return new Dimension(w, h);
}
public void setScale(double s)
{
scale = s;
revalidate(); // update the scroll pane
repaint();
}
private void loadImage()
{
File file = new File("E:/route1_28.png");
try
{
//URL url = getClass().getResource("file:///E:/route1_28.png");
image = ImageIO.read(file);
}
catch(MalformedURLException mue)
{
System.out.println("URL trouble: " + mue.getMessage());
}
catch(IOException ioe)
{
System.out.println("read trouble: " + ioe.getMessage());
}
}
}
class ImageZoom
{
ImagePanel imagePanel;
public ImageZoom(ImagePanel ip)
{
imagePanel = ip;
}
public JPanel getUIPanel()
{
SpinnerNumberModel model = new SpinnerNumberModel(1.0, 0.1, 1.4, .01);
final JSpinner spinner = new JSpinner(model);
spinner.setPreferredSize(new Dimension(45, spinner.getPreferredSize().height));
spinner.addChangeListener(new ChangeListener()
{
public void stateChanged(ChangeEvent e)
{
float scale = ((Double)spinner.getValue()).floatValue();
imagePanel.setScale(scale);
}
});
JPanel panel = new JPanel();
panel.add(new JLabel("scale"));
panel.add(spinner);
return panel;
}
} |
Partager