Image Process

来源:互联网 发布:java塔防游戏有哪些 编辑:程序博客网 时间:2024/06/08 00:28
package function;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;public class ImageProcessor { public static BufferedImage getBufferedImage(final File file) throws IOException { final BufferedImage image = ImageIO.read(file); return image; } public static BufferedImage convertGray(final File file) throws IOException { final BufferedImage image = getBufferedImage(file); final int width = image.getWidth(); final int height = image.getHeight(); for(int j = 0; j < height; j++) { for(int i = 0; i < width; i++){ int pixel = image.getRGB(i, j); int r = (pixel & 0xff0000 ) >> 16 ; int g = (pixel & 0xff00 ) >> 8 ; int b = (pixel & 0xff ); int gray = (r * 30 + g * 59 + b * 11) / 100; int newPixel = (gray<<16) + (gray<<8) + gray; image.setRGB(i, j, newPixel); } } return image; } public static BufferedImage convertGray(final String filePath) throws IOException { return convertGray(new File(filePath)); } public static BufferedImage mirrorEffect(BufferedImage image) { final int width = image.getWidth(); final int height = image.getHeight(); for(int i = 0; i < height; i++) { for(int j = 0; j < width / 2; j++) { final int leftPixel = image.getRGB(j, i); final int rightPixel = image.getRGB(width -1 - j, i); image.setRGB(j, i, rightPixel); image.setRGB(width -1 - j, i, leftPixel); } } return image; } public static BufferedImage headstandEffect(BufferedImage image) { final int width = image.getWidth(); final int height = image.getHeight(); for(int i = 0; i < height; i++) { for(int j = 0; j < width / 2; j++) { final int leftPixel = image.getRGB(j, i); final int rightPixel = image.getRGB(width -1 - j, height - 1 - i); image.setRGB(j, i, rightPixel); image.setRGB(width -1 - j, height - 1 - i, leftPixel); } } return image; }}package gui;import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.Image;import java.awt.dnd.DropTarget;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.SwingUtilities;import function.ImageProcessor;/** * @author dingbiao * */public class ViewFrame extends JFrame { private int width = 800; private int height = 600; private JLabel labelLeft; private JLabel labelRight; private JButton buttonOpen; private JButton buttonGray; private JButton buttonMirror; private JButton buttonHeadstand; private File sourceFile = null; private BufferedImage targetImage = null; public ViewFrame() { setTitle("Image View"); //setResizable(false); setSize(width, height); setLayout(new BorderLayout()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setDropTarget(new DropTarget()); setJMenuBar(createMenus()); initFrame(); } private JMenuBar createMenus() { final JMenuBar menubar = new JMenuBar(); final JMenu menuFile = new JMenu("File"); final JMenu menuEdit = new JMenu("Edit"); menubar.add(menuFile); menubar.add(menuEdit); final JMenuItem itemOpen = new JMenuItem("Open"); itemOpen.addActionListener(new ControlListener()); itemOpen.setActionCommand("open"); menuFile.add(itemOpen); final JMenuItem itemGray = new JMenuItem("Gray"); itemGray.addActionListener(new ControlListener()); itemGray.setActionCommand("gray"); menuEdit.add(itemGray); final JMenuItem itemMirror = new JMenuItem("Mirror"); itemMirror.addActionListener(new ControlListener()); itemMirror.setActionCommand("mirror"); menuEdit.add(itemMirror); return menubar; } private void initFrame() { final JPanel panelBackground = new JPanel(); panelBackground.setLayout(new GridLayout(1, 2, 1, 1)); add(panelBackground, BorderLayout.CENTER); labelLeft = new JLabel(); final JScrollPane scrollPaneLeft = new JScrollPane(labelLeft); panelBackground.add(scrollPaneLeft); labelRight = new JLabel(); final JScrollPane scrollPaneRight = new JScrollPane(labelRight); panelBackground.add(scrollPaneRight); final JPanel panelControl = new JPanel(); add(panelControl, BorderLayout.SOUTH); buttonOpen = new JButton("Open"); buttonOpen.addActionListener(new ControlListener()); buttonOpen.setActionCommand("open"); panelControl.add(buttonOpen); buttonGray = new JButton("Gray"); buttonGray.addActionListener(new ControlListener()); buttonGray.setActionCommand("gray"); panelControl.add(buttonGray); buttonMirror = new JButton("Mirror"); buttonMirror.addActionListener(new ControlListener()); buttonMirror.setActionCommand("mirror"); panelControl.add(buttonMirror); buttonHeadstand = new JButton("Headstand"); buttonHeadstand.addActionListener(new ControlListener()); buttonHeadstand.setActionCommand("headstand"); panelControl.add(buttonHeadstand); } private void loadSourceImage(final File imageFile) { SwingUtilities.invokeLater(new Runnable() { public void run() { try { final BufferedImage image = ImageIO.read(imageFile); labelLeft.setIcon(new ImageIcon(image)); targetImage = image; } catch (IOException e) { e.printStackTrace(); } } }); } public void showImage(final File imageFile) { SwingUtilities.invokeLater(new Runnable() { public void run() { setImageIcon(imageFile); } }); } public void showImage(final BufferedImage image) { SwingUtilities.invokeLater(new Runnable() { public void run() { setImageIcon(image); } }); } public void showImage(final String filePath) { showImage(new File(filePath)); } private void setImageIcon(final Image image) { labelRight.setIcon(new ImageIcon(image)); } private void setImageIcon(final File imageFile) { try { Image image = ImageIO.read(imageFile); setIconImage(image); } catch (IOException e) { e.printStackTrace(); } } class ControlListener implements ActionListener { public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getActionCommand() == "open") { final JFileChooser chooser = new JFileChooser(); chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); chooser.setMultiSelectionEnabled(false); chooser.setDialogTitle("Please select an image file"); chooser.setApproveButtonText("Open"); chooser.setCurrentDirectory(new File("E://")); final int retValue = chooser.showOpenDialog(null); if(retValue == JFileChooser.APPROVE_OPTION) { sourceFile = chooser.getSelectedFile(); loadSourceImage(sourceFile); } } else if(e.getActionCommand() == "gray") { if (sourceFile == null) { JOptionPane.showMessageDialog(null, "Please open a source file firstly"); return; } try { final BufferedImage image = ImageProcessor.convertGray(sourceFile); showImage(image); } catch (IOException e1) { e1.printStackTrace(); } } else if(e.getActionCommand() == "mirror") { if(targetImage != null) { ImageProcessor.mirrorEffect(targetImage); showImage(targetImage); } } else if (e.getActionCommand() == "headstand") { if(targetImage != null) { ImageProcessor.headstandEffect(targetImage); showImage(targetImage); } } } }}