📄 snpframe.java
字号:
package bin;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Graphics;
import java.awt.image.*;
import java.awt.event.*;
import java.awt.*;
import java.net.*;
import java.util.Date;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import java.io.IOException;
import java.io.File;
import java.io.FileOutputStream;
public class SNPFrame extends JFrame implements ActionListener{
public static Color DarkColor = new Color(55, 77, 118); //暗色
public static Color LightColor = new Color(111, 146, 212); //亮色
Border emptyBorder = BorderFactory.createEmptyBorder(); //未选中时的边框
Image icon;
/*主界面容器*/
Container cp = this.getContentPane();
/*帮助面板*/
JPanel helpPanel = new JPanel();
ImageIcon imgSetup, imgHelp, imgAbout;
/*about按钮*/
JButton aboutButton = new JButton(); //关于
/*set按钮*/
JButton setupButton = new JButton(); //设置
/*help按钮*/
JButton helpButton = new JButton(); //帮助
HelpDialog helpDialog; //帮助对话框
AboutDialog aboutDialog; //关于对话框
/*按钮面板*/
JPanel actionPanel = new JPanel();
/*视频/摄像头*/
CheckboxGroup cbg = new CheckboxGroup();
Checkbox selectCb = new Checkbox("选择视频", cbg, true);
Checkbox vedioCb = new Checkbox("摄像头连接", cbg, false);
JButton useSliderButton = new JButton("使用滑杆条调整参数");//使用滑杆
JButton startButton=new JButton("SNP处理");//开始按钮
JButton selectButton = new JButton("选择视频");//选择视频
JButton saveButton = new JButton("保存图像");//保存处理结果
JButton binaryButton = new JButton("二值化图");//二值化处理
JButton pengzhangButton = new JButton("二值膨胀");//二值化膨胀处理
JButton totalalphaButton = new JButton("光强度和");//光线强度和
JButton addButton =new JButton("检测区域");//增加检测区域
JButton delButton =new JButton("删除区域");//删除检测区域
/*滑杆条*/
JSlider jSlider = new JSlider(0, 10);
JTextField jtf = new JTextField(" 前景阈值:3.0f ");
JSlider jSlider2 = new JSlider();
JTextField jtf2 = new JTextField(" 阴影阈值: -3.0f ");
/*视频面板*/
JPanel contentPanel = new JPanel();
/*原始视频面板*/
JPanel orientpanel = new JPanel();
/*SNP处理结果视频面板*/
JPanel resultpanel = new JPanel();
/*状态面板*/
JPanel statusPanel = new JPanel(); //状态栏
Date date = new Date();
String now = (date.getYear() + 1900) + "年" + (date.getMonth() + 1) + "月" + date.getDate() + "日";
public JTextField statusField = new JTextField(
"欢迎使用SNP算法演示系统 作者:段俊杰 版本:V1.0\t\t\t\t\t 今天是:" + now);
public JLabel tiplabel = new JLabel("起始帧:");
public JTextField startframe = new JTextField(3);
public JLabel endlabel = new JLabel("帧");
public JLabel skiplabel = new JLabel("跳帧:");
public JTextField skipnum = new JTextField(3);
/*提示当前处理对象*/
JLabel tipslabel = new JLabel(" 现在对视频图像进行SNP处理");
Font font = new Font("楷体", Font.BOLD, 30);
/*布尔数值*/
boolean start = false;//是否开始
boolean saved = false;//是否保存
boolean binaryvalue = false;//是否二值处理
boolean wantpengzhang = false;//是否膨胀
boolean totalalpha = false;//光线强度
boolean gety = true;//是否获取Y分量
/*检测区域矩形参数*/
boolean canchange = true;//矩形是否可变
boolean useslider = false;//是否使用滑杆
int startX, startY, endX, endY;//矩形四个顶点
/*视频文件路径*/
String path="";
int startframenum = 1;
int skipframenum = 1;
Dimension faceSize = new Dimension(870, 450);
/*初始常量值*/
static int totalpic = 1;
float slidervalue = 3.0f;
float slidervalue2 = -3.0f;
RecLabel recLabel=new RecLabel();
public SNPFrame() {
initResource();
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
startframe.setText("1");
skipnum.setText("1");
snpInit();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation( (int) (screenSize.width - faceSize.getWidth()) / 2,
(int) (screenSize.height - faceSize.getHeight()) / 2);
this.setResizable(false);
this.setTitle("SNP算法演示"); //设置标题
this.setIconImage(icon); //设置程序图标
URLClassLoader urlLoader = (URLClassLoader)this.getClass().getClassLoader();
URL url = urlLoader.findResource("images/cursor.gif");
Image animateImage = new ImageIcon(url).getImage();
Cursor cursor = Toolkit.getDefaultToolkit().createCustomCursor(
animateImage, new Point(0, 0), "cursor");
this.setCursor(cursor);
} catch (Exception exception) {
exception.printStackTrace();
}
}
public void initResource() {
//程序图标
icon = getImage("images/snp.gif");
imgHelp = new ImageIcon(getImage("images/help.gif"));
imgAbout = new ImageIcon(getImage("images/about.gif"));
//初始化对话框
helpDialog = new HelpDialog((JFrame)this); //帮助对话框
aboutDialog = new AboutDialog((JFrame)this); //关于对话框
}
Image getImage(String filename) {
URLClassLoader urlLoader = (URLClassLoader)this.getClass().
getClassLoader();
URL url = null;
Image image = null;
url = urlLoader.findResource(filename);
image = Toolkit.getDefaultToolkit().getImage(url);
MediaTracker mediatracker = new MediaTracker(this);
try {
mediatracker.addImage(image, 0);
mediatracker.waitForID(0);
}
catch (InterruptedException _ex) {
image = null;
}
if (mediatracker.isErrorID(0)) {
image = null;
}
return image;
}
/*设置是否要计算totalalpha的值*/
public void setTotalalpha(boolean totalalpha)
{
this.totalalpha = totalalpha;
}
public void setBinaryvalue(boolean binaryvalue)
{
this.binaryvalue = binaryvalue;
}
public boolean getBinaryvalue()
{
return this.binaryvalue;
}
public void setPengzhang(boolean wantpengzhang)
{
this.wantpengzhang = wantpengzhang;
}
/*获得膨胀状态*/
public boolean getPengzhang()
{
return this.wantpengzhang;
}
public void setSaved(boolean saved)
{
this.saved = saved;
}
public boolean getSaved()
{
return this.saved;
}
/* public void setPic(boolean paintpic)
{
this.paintpic = paintpic;
}
public boolean getPic()
{
return this.paintpic;
}*/
public void setStart(boolean start){
this.start=start;
}
public boolean getStart(){
return start;
}
public void setRecIcon(BufferedImage inImage){
recLabel.setIcon(new ImageIcon(inImage));
}
public String getPath(){
return "file:"+path;
}
public void setPath(String path){
this.path=path;
}
private void snpInit() throws Exception {
setSize(870, 450);
/*界面整体布局*/
Border border = BorderFactory.createBevelBorder(BevelBorder.LOWERED,
new Color(45, 92, 162),
new Color(43, 66, 97),
new Color(45, 92, 162),
new Color(84, 123, 200));
BorderLayout borderLayout = new BorderLayout();
tipslabel.setForeground(LightColor);
tipslabel.setBounds(new Rectangle(600, 30 , 150, 30));
tipslabel.setFont(font);
/*帮助面板初始化*/
helpPanel.setBackground(DarkColor);
helpPanel.setPreferredSize(new Dimension(780, 50));
helpPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
/*按钮面板*/
actionPanel.setBackground(LightColor);
actionPanel.setBorder(border);
actionPanel.setPreferredSize(new Dimension(200, 380));
actionPanel.setMinimumSize(new Dimension(200, 380));
/*视频面板初始化*/
JLabel themelabel = new JLabel("SNP算法结果演示");
themelabel.setForeground(Color.white);
themelabel.setBounds(new Rectangle(285, 10 , 150, 30));
JLabel orientlabel = new JLabel("原始视频");
orientlabel.setForeground(Color.YELLOW);
orientlabel.setBounds(new Rectangle(120, 300 , 100, 30));
JLabel snpresultlabel = new JLabel("SNP处理后视频");
snpresultlabel.setForeground(Color.YELLOW);
snpresultlabel.setBounds(new Rectangle(430, 300 , 100, 30));
contentPanel.setBackground(DarkColor);
contentPanel.setBorder(border);
contentPanel.setPreferredSize(new Dimension(620, 380));
contentPanel.setMinimumSize(new Dimension(620, 380));
/*状态面板初始化*/
statusPanel.setBackground(DarkColor);
statusPanel.setBorder(border);
statusPanel.setPreferredSize(new Dimension(620, 24));
statusPanel.setMinimumSize(new Dimension(620, 24));
statusPanel.setLayout(new BorderLayout());
cp.setLayout(borderLayout);
cp.add(helpPanel, BorderLayout.NORTH);
cp.add(actionPanel, BorderLayout.EAST);
cp.add(contentPanel, BorderLayout.CENTER);
cp.add(statusPanel, BorderLayout.SOUTH);
/*视频面板初始化*/
contentPanel.setLayout(null);
orientpanel.setLayout(null);
resultpanel.setLayout(null);
orientpanel.setBounds(new Rectangle(10, 50, 320, 240));
resultpanel.setBounds(new Rectangle(340,50 , 320, 240));
recLabel.setBounds(new Rectangle(0,0,320,240));
recLabel.setOpaque(true);
resultpanel.add(recLabel);
contentPanel.add(themelabel);
contentPanel.add(orientpanel);
contentPanel.add(resultpanel);
contentPanel.add(orientlabel);
contentPanel.add(snpresultlabel);
/*按钮面板初始化*/
selectCb.setBounds(new Rectangle(0, 0, 87, 31));
vedioCb.setBounds(new Rectangle(0, 0, 87, 31));
actionPanel.add(selectCb);
actionPanel.add(vedioCb);
actionPanel.add(jSlider);
actionPanel.add(jtf);
actionPanel.add(jSlider2);
actionPanel.add(jtf2);
jSlider.setMaximum(1000);
jSlider.setValue(300);
jSlider2.setMaximum(700);
jSlider2.setValue(300);
jtf.setEnabled(false);
jtf2.setEnabled(false);
actionPanel.add(useSliderButton);
actionPanel.add(tiplabel);
actionPanel.add(startframe);
actionPanel.add(endlabel);
actionPanel.add(skiplabel);
actionPanel.add(skipnum);
// actionPanel.add(endlabel);
actionPanel.add(selectButton);
actionPanel.add(startButton);
actionPanel.add(saveButton);
actionPanel.add(totalalphaButton);
actionPanel.add(binaryButton);
actionPanel.add(pengzhangButton);
actionPanel.add(addButton);
actionPanel.add(delButton);
addButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
recLabel.addAction();
}
});
delButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
recLabel.removeAction();
}
});
//加入状态栏
statusPanel.add(statusField, BorderLayout.CENTER);
statusField.setEditable(false);
statusField.setForeground(Color.white);
statusField.setBackground(DarkColor);
helpPanel.add(aboutButton);
aboutButton.setBorder(emptyBorder);
aboutButton.setIcon(imgAbout);
aboutButton.addActionListener(this);
helpPanel.add(helpButton);
helpButton.setBorder(emptyBorder);
helpButton.setIcon(imgHelp);
helpButton.addActionListener(this);
helpPanel.add(tipslabel, FlowLayout.RIGHT);
}
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
if (obj == aboutButton) { //关于
aboutDialog.show();
}
else if (obj == helpButton) { //帮助
//new Help();
helpDialog.show();
}
}
//进度条响应类
static class SliderListener implements ChangeListener {
SNPFrame frame;
public SliderListener(SNPFrame frame){
this.frame=frame;
}
public void stateChanged(ChangeEvent e) {
JSlider s1 = (JSlider)e.getSource();
frame.slidervalue = (float)s1.getValue()/100;
frame.jtf.setText("前景阈值: " + frame.slidervalue );
}
}
//进度条响应类
static class SliderListener2 implements ChangeListener {
SNPFrame frame;
public SliderListener2(SNPFrame frame){
this.frame=frame;
}
public void stateChanged(ChangeEvent e) {
JSlider s1 = (JSlider)e.getSource();
frame.slidervalue2 = -((float)s1.getValue()/100);
frame.jtf2.setText("阴影阈值: " + frame.slidervalue2 );
}
}
/**/
static class SliderButtonListener implements ActionListener
{
SNPFrame frame;
public SliderButtonListener(SNPFrame frame){
this.frame=frame;
}
public void actionPerformed(ActionEvent e){
JButton btn = (JButton)e.getSource();
if(btn.isEnabled())
{
if(btn.getText().equals("使用滑杆条调整参数"))
{
frame.useslider = true;
frame.jSlider.setEnabled(true);
frame.jSlider2.setEnabled(true);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -