Results 1 to 4 of 4
Thread: Rotating an image
- 10-25-2008, 11:59 AM #1
Member
- Join Date
- Oct 2008
- Posts
- 3
- Rep Power
- 0
-
Have you yet gone through the Sun 2D graphics tutorials? If not, then you're in for a treat. Check out this section on transformations: Transforming Shapes, Text, and Images (The Java™ Tutorials > 2D Graphics > Advanced Topics in Java2D)
- 11-05-2008, 03:50 AM #3
Member
- Join Date
- Oct 2008
- Posts
- 3
- Rep Power
- 0
I've been busy with the previous weeks and AffineTransform is just really hard. Well, here's what I've done so far:
Java Code:import java.awt.*; import java.awt.event.*; import java.awt.geom.AffineTransform; import java.awt.image.*; import javax.imageio.*; import javax.swing.*; import java.io.*; import javax.swing.filechooser.*; public class ImageViewer extends JFrame { private AffineTransform at = new AffineTransform(); private Buttons buttons = new Buttons(); private JButton zoomIn = new JButton("Zoom In"); private JButton zoomOut = new JButton("Zoom Out"); private JButton rotateLeft = new JButton("Rotate Left"); private JButton rotateRight = new JButton("Rotate Right"); private JButton reset = new JButton("Reset"); private JLabel canvas = new JLabel(); private JMenu fileMenu = new JMenu("File"); private JMenu createMenu = new JMenu("Create"); private JMenuBar menuBar = new JMenuBar(); private JMenuItem open; private JMenuItem add; private JMenuItem collage; private JFileChooser imageChooser; private Image image; private int width; private int height; private Container container; private JPanel imgPnl = new JPanel(); private double scale = 1.0; private int angle = 0; public static void main(String args[]) { JFrame jFrame = new ImageViewer(); jFrame.setVisible(true); } public ImageViewer() { super("ImageViewer"); PicManagerLayout(); PicManagerHandler(); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(500,500); setExtendedState(MAXIMIZED_BOTH); setLocationRelativeTo(null); } private void PicManagerLayout() { buttons.disable(zoomIn, zoomOut, rotateLeft, rotateRight, reset); JPanel optionsPnl = new JPanel(new GridLayout(1, 0, 5, 5)); optionsPnl.add(zoomIn); optionsPnl.add(zoomOut); optionsPnl.add(rotateLeft); optionsPnl.add(rotateRight); optionsPnl.add(reset); JPanel northPnl = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 5)); northPnl.add(optionsPnl); northPnl.setBackground(SystemColor.control); //JPanel sidePnl = new JPanel(new GridLayout(10 ,0 ,4, 4)); //labels[0].setIcon(new ImageIcon(image)); //sidePnl.add(labels[0]); container = getContentPane(); container.setLayout(new BorderLayout()); container.add(new JScrollPane(canvas), BorderLayout.CENTER); container.add(northPnl, BorderLayout.NORTH); //container.add(sidePnl, BorderLayout.WEST); open = new JMenuItem("Open"); add = new JMenuItem("Add Image"); collage = new JMenuItem("Create collage"); fileMenu.add(open); fileMenu.add(add); createMenu.add(collage); menuBar.add(fileMenu); menuBar.add(createMenu); setJMenuBar(menuBar); } public void labelIcon(Image image){ canvas.setHorizontalAlignment(JLabel.CENTER); canvas.setVerticalAlignment(JLabel.CENTER); canvas.setIcon(new ImageIcon(image)); } private void PicManagerHandler() { zoomIn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { scale *= 1.5; applyTransform(image); } }); zoomOut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { scale *= 2.0/3.0; applyTransform(image); } }); rotateLeft.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { angle = (angle - 1) % 4; applyTransform(image); } }); rotateRight.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { angle = (angle + 1) % 4; applyTransform(image); } }); reset.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { scale = 1.0; angle = 0; applyTransform(image); } }); open.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent openev) { imageChooser = new JFileChooser(); imageChooser.setCurrentDirectory(new File(".")); imageChooser.setFileFilter(new ImageFilter()); int chooser = imageChooser.showOpenDialog(container); if(chooser == JFileChooser.APPROVE_OPTION){ String name = imageChooser.getSelectedFile().getPath(); loadImage(name); } } }); } private void loadImage(String file) { buttons.enable(zoomIn, zoomOut, rotateLeft, rotateRight, reset); try { image = ImageIO.read(new File(file)); width = image.getWidth(null); height = image.getHeight(null); int fitWidth = this.getWidth(); int fitHeight = this.getWidth(); if(width > fitWidth){ width = fitWidth; } if(height > fitHeight){ height = fitHeight; } } catch (IOException ioex) { System.out.println("Cannot load image: \"" + file + "\""); System.exit(-1); } labelIcon(image); scale = 1.0; angle = 0; applyTransform(image); } private void applyTransform(Image image) { AffineTransform at = new AffineTransform(); at.scale(scale, scale); at.rotate(0.5 * angle * Math.PI, width/2, height/2); int w = Math.min(2000, (int) (scale * width)); int h = Math.min(2000, (int) (scale * height)); BufferedImage buffer = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics2D graphics = (Graphics2D) buffer.getGraphics(); graphics.drawImage(image, at, null); labelIcon(buffer); } }Java Code:import java.io.File; public class ImageFilter extends javax.swing.filechooser.FileFilter{ public boolean accept(File f){ String fileN = f.getName(); if(fileN.toLowerCase().endsWith(".jpg") || fileN.toLowerCase().endsWith(".jpeg") || fileN.toLowerCase().endsWith(".gif") || fileN.toLowerCase().endsWith(".png") || f.isDirectory() ){ return true; }else{ return false; } } public String getDescription(){ return "Images Only"; } }Yeah, I made three classes so far, to implement OOP more. Anyway, please help me to solve the thing when rotating the image - try, and you'll see black at the sides and that the image will be cropped.Java Code:import javax.swing.JButton; public class Buttons{ public void enable(JButton btn1, JButton btn2, JButton btn3, JButton btn4, JButton btn5){ btn1.setEnabled(true); btn2.setEnabled(true); btn3.setEnabled(true); btn4.setEnabled(true); btn5.setEnabled(true); } public void disable(JButton btn1, JButton btn2, JButton btn3, JButton btn4, JButton btn5){ btn1.setEnabled(false); btn2.setEnabled(false); btn3.setEnabled(false); btn4.setEnabled(false); btn5.setEnabled(false); } }
Could someone also be kindly explain transform, translate, concatenate methods in detail? Maybe these methods can be helpful in my project.
Thanks in advance.
- 02-27-2009, 11:54 PM #4
Member
- Join Date
- Jan 2009
- Posts
- 35
- Rep Power
- 0
Similar Threads
-
Canvas Image popups another image (SWT)
By SpaceY in forum New To JavaReplies: 2Last Post: 11-11-2008, 01:25 PM -
Rotating objects in Java Applets
By Unome in forum Java AppletsReplies: 1Last Post: 10-17-2008, 07:35 AM -
Rotating and flipping an image in SWT
By Java Tip in forum SWTReplies: 0Last Post: 07-02-2008, 08:01 PM -
Converting multiple banded image into single banded image... Image enhancement
By archanajathan in forum Advanced JavaReplies: 0Last Post: 01-08-2008, 05:29 PM -
Two Problems Rotating and collision detection help
By jaferris in forum Java AppletsReplies: 2Last Post: 01-07-2008, 11:19 PM


LinkBack URL
About LinkBacks
Reply With Quote
Bookmarks