Image Process
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);
}
}
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.