📄 graphkw.java
字号:
//---------------------------------------------------
//------9120004 王喆 200009207 2003.11
//---------------------------------------------------
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
public class GraphKW extends WindowAdapter implements ActionListener, MouseListener {
Frame f; //总窗体
Dialog d; //对话框
FileDialog fOpen; //文件打开对话框
FileDialog fSave; //文件保存对话框
MenuBar mb;
Menu mFileOpt; //文件菜单
Menu mEdit; //编辑菜单
Menu mHelp; //帮助菜单
Menu mOverturn; //翻转子菜单
Menu mMOHO; //模糊子菜单
Menu popmOverturn; //翻转弹出子菜单
Menu popmMOHO; //模糊弹出子菜单
MenuItem itmLoad;
MenuItem itmSave;
MenuItem itmSaveAs;
MenuItem itmExit;
MenuItem itmAbout;
MenuItem popUndo; //弹出式菜单按钮
MenuItem popFANSE;
MenuItem popJUNHENG;
MenuItem popSHUIPING;
MenuItem popCHUIZHI;
MenuItem popXIANXING;
MenuItem popZHONGZHI;
MenuItem popBIANYUAN;
MenuItem popHENGXIANG;
MenuItem popSHUXIANG;
MenuItem popZONGMOHU;
MenuItem popFUDIAO;
MenuItem e_Undo;
MenuItem e_FANSE;
MenuItem e_JUNHENG;
MenuItem e_SHUIPING;
MenuItem e_CHUIZHI;
MenuItem e_XIANXING;
MenuItem e_ZHONGZHI;
MenuItem e_BIANYUAN;
MenuItem e_HENGXIANG;
MenuItem e_SHUXIANG;
MenuItem e_ZONGMOHU;
MenuItem e_FUDIAO;
PopupMenu popPanel; //弹出式菜单
MyCanvas canvas;
//--------------------------------------------------- //主程序
public static void main(String[] args) {
GraphKW app=new GraphKW();
app.go();
}
//---------------------------------------------------
public void go() {
f=new Frame("BMP_Work 9120004 kingwise 200009207"); //文件标题
f.addWindowListener(this);
f.setLayout(new BorderLayout());
Color myColor=new Color(128,128,128);
f.setBackground(myColor); //改底色
//-----------------------------------------------文件菜单
itmLoad=new MenuItem("打开图象文件(24位色)");
itmLoad.addActionListener(this);
itmSave=new MenuItem("保存图象文件");
itmSave.addActionListener(this);
itmSaveAs=new MenuItem("另存为");
itmSaveAs.addActionListener(this);
itmExit=new MenuItem("退出");
itmExit.addActionListener(this);
itmAbout=new MenuItem("关于");
itmAbout.addActionListener(this);
//-----------------------------------------------编辑菜单
popUndo=new MenuItem("撤销一步");
popUndo.addActionListener(this);
popFANSE=new MenuItem("反色");
popFANSE.addActionListener(this);
popJUNHENG=new MenuItem("均衡");
popJUNHENG.addActionListener(this);
popSHUIPING=new MenuItem("水平镜像");
popSHUIPING.addActionListener(this);
popCHUIZHI=new MenuItem("垂直镜像");
popCHUIZHI.addActionListener(this);
popXIANXING=new MenuItem("线性平滑滤波");
popXIANXING.addActionListener(this);
popZHONGZHI=new MenuItem("中值滤波");
popZHONGZHI.addActionListener(this);
popBIANYUAN=new MenuItem("边缘识别");
popBIANYUAN.addActionListener(this);
popHENGXIANG=new MenuItem("横向模糊");
popHENGXIANG.addActionListener(this);
popSHUXIANG=new MenuItem("竖向模糊");
popSHUXIANG.addActionListener(this);
popZONGMOHU=new MenuItem("总体模糊");
popZONGMOHU.addActionListener(this);
popFUDIAO=new MenuItem("浮雕效果");
popFUDIAO.addActionListener(this);
e_Undo=new MenuItem("撤销一步");
e_Undo.addActionListener(this);
e_FANSE=new MenuItem("反色");
e_FANSE.addActionListener(this);
e_JUNHENG=new MenuItem("均衡");
e_JUNHENG.addActionListener(this);
e_SHUIPING=new MenuItem("水平镜像");
e_SHUIPING.addActionListener(this);
e_CHUIZHI=new MenuItem("垂直镜像");
e_CHUIZHI.addActionListener(this);
e_XIANXING=new MenuItem("线性平滑滤波");
e_XIANXING.addActionListener(this);
e_ZHONGZHI=new MenuItem("中值滤波");
e_ZHONGZHI.addActionListener(this);
e_BIANYUAN=new MenuItem("边缘识别");
e_BIANYUAN.addActionListener(this);
e_HENGXIANG=new MenuItem("横向模糊");
e_HENGXIANG.addActionListener(this);
e_SHUXIANG=new MenuItem("竖向模糊");
e_SHUXIANG.addActionListener(this);
e_ZONGMOHU=new MenuItem("总体模糊");
e_ZONGMOHU.addActionListener(this);
e_FUDIAO=new MenuItem("浮雕效果");
e_FUDIAO.addActionListener(this);
mOverturn=new Menu("翻转");
mOverturn.add(e_SHUIPING);
mOverturn.addSeparator();
mOverturn.add(e_CHUIZHI);
mMOHO=new Menu("模糊");
mMOHO.add(e_HENGXIANG);
mMOHO.addSeparator();
mMOHO.add(e_SHUXIANG);
mMOHO.addSeparator();
mMOHO.add(e_ZONGMOHU);
popmOverturn=new Menu("翻转"); //翻转弹出子菜单
popmOverturn.add(popSHUIPING);
popmOverturn.add(popCHUIZHI);
popmMOHO=new Menu("模糊"); //模糊弹出子菜单
popmMOHO.add(popHENGXIANG);
popmMOHO.add(popSHUXIANG);
popmMOHO.add(popZONGMOHU);
mFileOpt=new Menu("文件");
mFileOpt.add(itmLoad);
mFileOpt.addSeparator();
mFileOpt.add(itmSave);
mFileOpt.addSeparator();
mFileOpt.add(itmSaveAs);
mFileOpt.addSeparator();
mFileOpt.add(itmExit);
mEdit=new Menu("编辑");
mEdit.add(e_Undo);
mEdit.addSeparator();
mEdit.add(e_FANSE);
mEdit.addSeparator();
mEdit.add(e_JUNHENG);
mEdit.addSeparator();
mEdit.add(mOverturn); //翻转子菜单
mEdit.addSeparator();
mEdit.add(e_XIANXING);
mEdit.addSeparator();
mEdit.add(e_ZHONGZHI);
mEdit.addSeparator();
mEdit.add(e_BIANYUAN);
mEdit.addSeparator();
mEdit.add(mMOHO); //模糊子菜单
mEdit.addSeparator();
mEdit.add(e_FUDIAO);
mHelp=new Menu("帮助");
mHelp.add(itmAbout);
mb=new MenuBar();
mb.add(mFileOpt);
mb.add(mEdit);
mb.add(mHelp);
fOpen=new FileDialog(f, "打开", FileDialog.LOAD);
fSave=new FileDialog(f, "另存为", FileDialog.SAVE);
popPanel=new PopupMenu();//弹出式菜单
popPanel.add(popFANSE);
popPanel.add(popJUNHENG);
popPanel.add(popmOverturn);//翻转弹出子菜单
popPanel.add(popXIANXING);
popPanel.add(popZHONGZHI);
popPanel.add(popBIANYUAN);
popPanel.add(popmMOHO);//模糊弹出子菜单
popPanel.add(popFUDIAO);
popPanel.add(popUndo);
canvas=new MyCanvas(); //画布
canvas.addMouseListener(this); //鼠标监听器
f.add(canvas, BorderLayout.CENTER);
f.add(popPanel);
f.setMenuBar(mb);
f.setSize(500, 300);
f.show();
setBtnStatus();
d=new Dialog(f,"Kingwise Workgroup 2003.11",true);
d.add("Center",new Label("9120004班 王喆(kingwise)200009207"));
d.pack();
d.addWindowListener(this);
}
//---------------------------------------------------//结束程序
public void windowClosing(WindowEvent e) {
if (e.getSource().equals(f)) System.exit(0);
else d.setVisible(false);
}
//---------------------------------------------------//鼠标监听
public void mouseClicked(MouseEvent e) {
popPanel.show(canvas, e.getX(), e.getY());
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
//---------------------------------------------------
public void actionPerformed(ActionEvent e) { //判断操作
if (e.getSource().equals(itmExit)) { //退出
System.exit(0);
} else if (e.getSource().equals(itmLoad)) { //装载图象
fOpen.show();
if (fOpen.getFile()!=null) {
canvas.load(fOpen.getDirectory()+fOpen.getFile());
f.setTitle("Kingwise 当前文件:"+fOpen.getDirectory()+fOpen.getFile());
}
setBtnStatus();
} else if (e.getSource().equals(itmSave)) { //保存图象
canvas.save();
setBtnStatus();
} else if (e.getSource().equals(itmSaveAs)) { //另存为
fSave.show();
if (fSave.getFile()!=null) {
canvas.saveAs(fSave.getDirectory()+fSave.getFile());
f.setTitle("Kingwise 当前文件:"+fSave.getDirectory()+fSave.getFile()); //显示标题
}
} else if (e.getSource().equals(itmAbout)) { //关于
d.setVisible(true);
} else if (e.getSource().equals(popUndo)||e.getSource().equals(e_Undo)) { //重复
canvas.undo();
setBtnStatus();
} else if (e.getSource().equals(popFANSE)||e.getSource().equals(e_FANSE)) { //反色
canvas.doFileter("FAN_SE");
setBtnStatus();
} else if (e.getSource().equals(popJUNHENG)||e.getSource().equals(e_JUNHENG)) { //均衡
canvas.doFileter("JUN_HENG");
setBtnStatus();
} else if (e.getSource().equals(popSHUIPING)||e.getSource().equals(e_SHUIPING)) { //水平翻转
canvas.doFileter("SHUI_PING");
setBtnStatus();
} else if (e.getSource().equals(popCHUIZHI)||e.getSource().equals(e_CHUIZHI)) { //垂直翻转
canvas.doFileter("CHUI_ZHI");
setBtnStatus();
} else if (e.getSource().equals(popXIANXING)||e.getSource().equals(e_XIANXING)) { //线性平滑
canvas.doFileter("XIAN_XING_PING_HUA");
setBtnStatus();
} else if (e.getSource().equals(popZHONGZHI)||e.getSource().equals(e_ZHONGZHI)) { //中值平衡
canvas.doFileter("ZHONG_ZHI");
setBtnStatus();
} else if (e.getSource().equals(popBIANYUAN)||e.getSource().equals(e_BIANYUAN)) { //线性锐化
canvas.doFileter("XIAN_XING_RUI_HUA");
setBtnStatus();
} else if (e.getSource().equals(popHENGXIANG)||e.getSource().equals(e_HENGXIANG)) { //横向模糊
canvas.doFileter("HENG_XIANG_MO_HU");
setBtnStatus();
} else if (e.getSource().equals(popSHUXIANG)||e.getSource().equals(e_SHUXIANG)) { //竖向模糊
canvas.doFileter("SHU_XIANG_MO_HU");
setBtnStatus();
} else if (e.getSource().equals(popZONGMOHU)||e.getSource().equals(e_ZONGMOHU)) { //总体模糊
canvas.doFileter("ZONG_TI_MO_HU");
setBtnStatus();
} else if (e.getSource().equals(popFUDIAO)||e.getSource().equals(e_FUDIAO)) { //浮雕效果
canvas.doFileter("FU_DIAO_XIAO_GUO");
setBtnStatus();
}
}
//---------------------------------------------------//设置按钮状态
private void setBtnStatus() {
itmSaveAs.setEnabled(canvas.file_loaded);
itmSave.setEnabled(canvas.flag_changed);
popUndo.setEnabled(canvas.flag_changed);
popFANSE.setEnabled(canvas.file_loaded);
popJUNHENG.setEnabled(canvas.file_loaded);
popSHUIPING.setEnabled(canvas.file_loaded);
popCHUIZHI.setEnabled(canvas.file_loaded);
popXIANXING.setEnabled(canvas.file_loaded);
popZHONGZHI.setEnabled(canvas.file_loaded);
popBIANYUAN.setEnabled(canvas.file_loaded);
popHENGXIANG.setEnabled(canvas.file_loaded);
popSHUXIANG.setEnabled(canvas.file_loaded);
popZONGMOHU.setEnabled(canvas.file_loaded);
popFUDIAO.setEnabled(canvas.file_loaded);
e_Undo.setEnabled(canvas.flag_changed);
e_FANSE.setEnabled(canvas.file_loaded);
e_JUNHENG.setEnabled(canvas.file_loaded);
e_SHUIPING.setEnabled(canvas.file_loaded);
e_CHUIZHI.setEnabled(canvas.file_loaded);
e_XIANXING.setEnabled(canvas.file_loaded);
e_ZHONGZHI.setEnabled(canvas.file_loaded);
e_BIANYUAN.setEnabled(canvas.file_loaded);
e_HENGXIANG.setEnabled(canvas.file_loaded);
e_SHUXIANG.setEnabled(canvas.file_loaded);
e_ZONGMOHU.setEnabled(canvas.file_loaded);
e_FUDIAO.setEnabled(canvas.file_loaded);
if (canvas.flag_redo_or_undo) {popUndo.setLabel("恢复一步");e_Undo.setLabel("恢复一步");} //重复和撤销反复出现
else {popUndo.setLabel("撤销一步");e_Undo.setLabel("撤销一步");}
}
}
//BMPFileAccessor调入文件=============================================
class BMPFileAccessor {
private static int readInt(RandomAccessFile raf, int offset) throws IOException {
raf.seek(offset);
int b1=raf.read(), b2=raf.read(), b3=raf.read(), b4=raf.read();
return b1+(b2<<8)+(b3<<16)+(b4<<24);
}
private static void writeInt(RandomAccessFile raf, int offset, int n) throws IOException {
raf.seek(offset);
int b1=n&255, b2=(n>>8)&255, b3=(n>>16)&255, b4=n>>24;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -