import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import java.io.*;
import javax.imageio.*;
import java.util.*;
public class MainFrame extends JFrame {
JMenuBar mb;
JMenu fileMenu;
JMenuItem newItem;
JMenuItem openItem;
JMenuItem saveItem;
JMenuItem closeItem;
JMenuItem exitItem;
JMenu editMenu;
JMenuItem undoItem;
JMenuItem redoItem;
JMenu geoMenu;
JMenuItem horMirrorItem;
JMenuItem verMirrorItem;
JMenuItem scaleItem;
JMenuItem rotateItem;
JMenu colorMenu;
JMenuItem grayScaleItem;
JMenuItem changeYHSItem;
JMenuItem histgramItem;
JMenuItem contrastItem;
JMenuItem histPlaneItem;
JMenu convolveMenu;
JMenuItem laplacianItem;
JMenuItem sharpItem;
JMenuItem blurItem;
JMenuItem filtItem;
JMenu frequentMenu;
JMenuItem fftItem;
JMenuItem decomposeItem;
JMenuItem markItem;
JToolBar tb;
JButton newBtn;
JButton openBtn;
JButton saveBtn;
ImagePanel imagePanel;
JScrollPane scrollPane;
ImageIcon imageIcon;
BufferedImage image;
JFileChooser chooser;
ImagePreviewer imagePreviewer;
ImageFileView fileView;
ImageFileFilter bmpFilter;
ImageFileFilter jpgFilter;
ImageFileFilter gifFilter;
ImageFileFilter bothFilter;
LinkedList undoList;
LinkedList redoList;
private final static int MAX_UNDO_COUNT = 10;
private final static int MAX_REDO_COUNT = 10;
public MainFrame() {
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
exit(e);
}
});
undoList = new LinkedList();
redoList = new LinkedList();
//imageIcon = new ImageIcon("c:/01.jpg");
//try { image = ImageIO.read(new File("c:/01.jpg")); }
//catch(Exception e) {};
//image = GeoTransform.horMirrorImage(image);
//image = reverse(image);
initComponents();
}
private void initComponents() {
Container contentPane = getContentPane();
imagePanel = new ImagePanel(image);
scrollPane = new JScrollPane(imagePanel);
contentPane.add(scrollPane, BorderLayout.CENTER);
chooser = new JFileChooser();
imagePreviewer = new ImagePreviewer(chooser);
fileView = new ImageFileView();
bmpFilter = new ImageFileFilter("bmp", "BMP Image Files");
jpgFilter = new ImageFileFilter("jpg", "JPEG Compressed Image Files");
gifFilter = new ImageFileFilter("gif", "GIF Image Files");
bothFilter = new ImageFileFilter(new String[] {"bmp", "jpg", "gif"}, "BMP, JPEG and GIF Image Files");
chooser.addChoosableFileFilter(gifFilter);
chooser.addChoosableFileFilter(bmpFilter);
chooser.addChoosableFileFilter(jpgFilter);
chooser.addChoosableFileFilter(bothFilter);
chooser.setAccessory(imagePreviewer);
chooser.setFileView(fileView);
chooser.setAcceptAllFileFilterUsed(false);
Icon fileIcon = new ImageIcon("images/file.gif");
Icon newIcon = new ImageIcon("images/new.gif");
Icon openIcon = new ImageIcon("images/open.gif");
Icon saveIcon = new ImageIcon("images/save.gif");
Icon undoIcon = new ImageIcon("images/undo.gif");
Icon redoIcon = new ImageIcon("images/redo.gif");
//----菜单条------------------------------------------------------------
mb = new JMenuBar();
setJMenuBar(mb);
//----File菜单----------------------------------------------------------
fileMenu = new JMenu("文件(F)");
fileMenu.setIcon(fileIcon);
fileMenu.setMnemonic('F');
mb.add(fileMenu);
newItem = new JMenuItem("新建(N)", newIcon);
newItem.setMnemonic('N');
newItem.setAccelerator(KeyStroke.getKeyStroke('N', Event.CTRL_MASK));
openItem = new JMenuItem("打开(O)", openIcon);
openItem.setMnemonic('O');
openItem.setAccelerator(KeyStroke.getKeyStroke('O', Event.CTRL_MASK));
openItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
openFile(e);
}
});
saveItem = new JMenuItem("保存(S)", saveIcon);
saveItem.setMnemonic('S');
saveItem.setAccelerator(KeyStroke.getKeyStroke('S', Event.CTRL_MASK));
closeItem = new JMenuItem("关闭(C)");
closeItem.setMnemonic('C');
exitItem = new JMenuItem("退出(X)");
exitItem.setMnemonic('X');
fileMenu.add(newItem);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
fileMenu.addSeparator();
fileMenu.add(exitItem);
//----Edit菜单----------------------------------------------------------
editMenu = new JMenu("编辑(E)");
editMenu.setMnemonic('E');
mb.add(editMenu);
undoItem = new JMenuItem("撤销(U)", undoIcon);
undoItem.setMnemonic('U');
undoItem.setAccelerator(KeyStroke.getKeyStroke('Z', Event.CTRL_MASK));
undoItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
undo(e);
}
});
redoItem = new JMenuItem("重做(R)", redoIcon);
redoItem.setMnemonic('R');
redoItem.setAccelerator(KeyStroke.getKeyStroke('Y', Event.CTRL_MASK));
redoItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
redo(e);
}
});
editMenu.add(undoItem);
editMenu.add(redoItem);
//----Geo菜单----------------------------------------------------------
geoMenu = new JMenu("几何变换(G)");
geoMenu.setMnemonic('G');
mb.add(geoMenu);
horMirrorItem = new JMenuItem("水平镜象(H)");
horMirrorItem.setMnemonic('H');
horMirrorItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
horMirror(e);
}
});
verMirrorItem = new JMenuItem("垂直镜象(V)");
verMirrorItem.setMnemonic('V');
verMirrorItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
verMirror(e);
}
});
scaleItem = new JMenuItem("比例缩放(S)");
scaleItem.setMnemonic('S');
scaleItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
scale(e);
}
});
rotateItem = new JMenuItem("旋转(R)");
rotateItem.setMnemonic('R');
rotateItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
rotate(e);
}
});
geoMenu.add(horMirrorItem);
geoMenu.add(verMirrorItem);
geoMenu.add(scaleItem);
geoMenu.add(rotateItem);
//----Color菜单----------------------------------------------------------
colorMenu = new JMenu("色彩变换(C)");
colorMenu.setMnemonic('C');
mb.add(colorMenu);
grayScaleItem = new JMenuItem("灰度(G)");
grayScaleItem.setMnemonic('S');
grayScaleItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
grayScale(e);
}
});
changeYHSItem = new JMenuItem("彩色修正(M)");
changeYHSItem.setMnemonic('M');
changeYHSItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
changeYHS(e);
}
});
histgramItem = new JMenuItem("绘制灰度直方图(H)");
histgramItem.setMnemonic('H');
histgramItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
histgram(e);
}
});
contrastItem = new JMenuItem("增强对比度(C)");
contrastItem.setMnemonic('C');
contrastItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
contrast(e);
}
});
histPlaneItem = new JMenuItem("灰度均衡(P)");
histPlaneItem.setMnemonic('P');
histPlaneItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
histPlane(e);
}
});
colorMenu.add(grayScaleItem);
colorMenu.add(changeYHSItem);
colorMenu.add(histgramItem);
colorMenu.add(contrastItem);
colorMenu.add(histPlaneItem);
//----Convolve菜单------------------------------------------------------
评论3
最新资源