?? 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 + -