This is the program of resizing image on mouse wheel scroll. Here I am using image-scaling-library for resizing image, This library gives good quality scaled images. Display Image using JScrollPane to handle overflow of image situations.
Adding Panel to JScrollPane
JFrame frmImageZoomIn = new JFrame(); JScrollPane scrollPane = new JScrollPane(); frmImageZoomIn.getContentPane().add(scrollPane, BorderLayout.CENTER); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); scrollPane.setViewportView(panel);
Adding Image to Panel
Icon imageIcon = new ImageIcon(inputImage); label = new JLabel( imageIcon ); panel.add(label, BorderLayout.CENTER);
Zoom factor based on Mouse Wheel Scroll
Observe notches variable in below code. If user scrolls mouse wheel up then notches value will be -1 or else it will be 1. based on notches value zoom factor value be changed. Based on zoom factor value image will be scaled
public void mouseWheelMoved(MouseWheelEvent e) { int notches = e.getWheelRotation(); double temp = zoom - (notches * 0.2); // minimum zoom factor is 1.0 temp = Math.max(temp, 1.0); if (temp != zoom) { zoom = temp; resizeImage(); } }
Complete Java Code
Update inputImage variable with the your image file path and then run this code
import java.awt.EventQueue; import javax.imageio.ImageIO; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import java.awt.BorderLayout; import javax.swing.JPanel; import com.mortennobel.imagescaling.ResampleOp; import java.awt.event.MouseWheelListener; import java.awt.event.MouseWheelEvent; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class ImageZoom { private JFrame frmImageZoomIn; private static final String inputImage = "C:\\my-pfl-pic.jpg"; // give image path here private JLabel label = null; private double zoom = 1.0; // zoom factor private BufferedImage image = null; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { ImageZoom window = new ImageZoom(); window.frmImageZoomIn.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the application. * @throws IOException */ public ImageZoom() throws IOException { initialize(); } /** * Initialize the contents of the frame. * @throws IOException */ private void initialize() throws IOException { frmImageZoomIn = new JFrame(); frmImageZoomIn.setTitle("Image Zoom In and Zoom Out"); frmImageZoomIn.setBounds(100, 100, 450, 300); frmImageZoomIn.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JScrollPane scrollPane = new JScrollPane(); frmImageZoomIn.getContentPane().add(scrollPane, BorderLayout.CENTER); image = ImageIO.read(new File(inputImage)); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); // display image as icon Icon imageIcon = new ImageIcon(inputImage); label = new JLabel( imageIcon ); panel.add(label, BorderLayout.CENTER); panel.addMouseWheelListener(new MouseWheelListener() { public void mouseWheelMoved(MouseWheelEvent e) { int notches = e.getWheelRotation(); double temp = zoom - (notches * 0.2); // minimum zoom factor is 1.0 temp = Math.max(temp, 1.0); if (temp != zoom) { zoom = temp; resizeImage(); } } }); scrollPane.setViewportView(panel); } public void resizeImage() { System.out.println(zoom); ResampleOp resampleOp = new ResampleOp((int)(image.getWidth()*zoom), (int)(image.getHeight()*zoom)); BufferedImage resizedIcon = resampleOp.filter(image, null); Icon imageIcon = new ImageIcon(resizedIcon); label.setIcon(imageIcon); } }
great
ReplyDeleteHi, Great.. Tutorial is just awesome..It is really helpful for a newbie like me.. I am a regular follower of your blog. Really very informative post you shared here. Kindly keep blogging. If anyone wants to become a Java developer learn from Java Training in Chennai. or learn thru Java Online Training in India . Nowadays Java has tons of job opportunities on various vertical industry.
ReplyDeletehow to fix com.mortennobel.imagescaling.ResampleOp package doesn`t exist error
ReplyDelete