Java tutorial
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.MediaTracker; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; import java.awt.image.DataBuffer; import javax.swing.Box; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JToggleButton; public class RasterDemo extends JFrame { RasterPanel displayPanel; JToggleButton flipButton; public RasterDemo() { super(); Container container = getContentPane(); displayPanel = new RasterPanel(); container.add(displayPanel); Box box = Box.createHorizontalBox(); flipButton = new JToggleButton("Flip the Image"); flipButton.addActionListener(new ButtonListener()); box.add(Box.createHorizontalGlue()); box.add(flipButton); box.add(Box.createHorizontalGlue()); container.add(box, BorderLayout.SOUTH); addWindowListener(new WindowEventHandler()); setSize(450, 400); show(); } class WindowEventHandler extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } public static void main(String arg[]) { new RasterDemo(); } class ButtonListener implements ActionListener { public void actionPerformed(ActionEvent e) { if (!displayPanel.flipped) { displayPanel.flipBufferedImage(); displayPanel.bi = displayPanel.bi2; displayPanel.flipped = true; } // If the image has already been flipped else { // Prepare to display the normal image displayPanel.bi = displayPanel.bi1; displayPanel.flipped = false; } // Update the display panel displayPanel.repaint(); } } } class RasterPanel extends JPanel { BufferedImage bi, bi1, bi2; boolean flipped = false; RasterPanel() { setBackground(Color.white); setSize(450, 400); Image image = getToolkit().getImage("largeJava2sLogo.jpg"); MediaTracker mt = new MediaTracker(this); mt.addImage(image, 1); try { mt.waitForAll(); } catch (Exception e) { System.out.println("Exception while loading image."); } if (image.getWidth(this) == -1) { System.out.println("No jpg file"); System.exit(0); } bi1 = new BufferedImage(image.getWidth(this), image.getHeight(this), BufferedImage.TYPE_INT_ARGB); Graphics2D big = bi1.createGraphics(); big.drawImage(image, 0, 0, this); bi = bi1; } public void flipBufferedImage() { bi2 = new BufferedImage(bi1.getWidth(), bi1.getHeight(), bi1.getType()); DataBuffer db1 = bi1.getRaster().getDataBuffer(); DataBuffer db2 = bi2.getRaster().getDataBuffer(); for (int i = db1.getSize() - 1, j = 0; i >= 0; --i, j++) { db2.setElem(j, db1.getElem(i)); } } public void update(Graphics g) { g.clearRect(0, 0, getWidth(), getHeight()); paintComponent(g); } public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2D = (Graphics2D) g; g2D.drawImage(bi, 0, 0, this); } }