package twiedow.videocam;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.filechooser.FileFilter;
import twiedow.videocam.filter.BlueboxFilter;
public class MainFrame extends JFrame {
public final static String FILE_PATTERN = "(.)*[.]((jpg)|(JPG)|(png)|(PNG)|(bmp)|(BMP))";
private VideoCamPanel camPanel;
private VideoCamPanel camBlueboxPanel;
private JLabel inputLabel;
private JLabel outputLabel;
private JLabel backgroundLabel;
private JLabel blueboxLabel;
private JButton captureBckgrdImgBtn;
private JButton captureBlueboxImgBtn;
private JButton loadBlueboxImgBtn;
private JFileChooser fileChooser;
private ImagePanel bckgrdImgPanel;
private ImagePanel blueboxImgPanel;
public MainFrame() {
super("Video");
setBounds(100, 100, 1024, 768);
setResizable(false);
setLayout(null);
inputLabel = new JLabel("Input");
inputLabel.setBounds(50, 10, 50, 20);
add(inputLabel);
outputLabel = new JLabel("Output");
outputLabel.setBounds(500, 10, 50, 20);
add(outputLabel);
backgroundLabel = new JLabel("Background");
backgroundLabel.setBounds(70, 320, 100, 20);
add(backgroundLabel);
blueboxLabel = new JLabel("Bluebox");
blueboxLabel.setBounds(500, 320, 100, 20);
add(blueboxLabel);
try {
camPanel = new VideoCamPanel(60, 40);
camPanel.startCamera();
add(camPanel);
}
catch (Exception e) {
e.printStackTrace();
}
captureBckgrdImgBtn = new JButton("Capture Background");
captureBckgrdImgBtn.setBounds(110, 620, 175, 50);
captureBckgrdImgBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
captureBackgroundImage();
}
});
add(captureBckgrdImgBtn);
captureBlueboxImgBtn = new JButton("Capture Bluebox");
captureBlueboxImgBtn.setBounds(540, 620, 175, 50);
captureBlueboxImgBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
captureBlueboxImage();
}
});
add(captureBlueboxImgBtn);
loadBlueboxImgBtn = new JButton("Load Bluebox");
loadBlueboxImgBtn.setBounds(740, 620, 175, 50);
loadBlueboxImgBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
loadBlueboxImage();
}
});
add(loadBlueboxImgBtn);
bckgrdImgPanel = new ImagePanel();
bckgrdImgPanel.setBounds(60, 350, 320, 240);
add(bckgrdImgPanel);
fileChooser = new JFileChooser();
fileChooser.setAcceptAllFileFilterUsed(false);
fileChooser.setFileFilter(new FileFilter() {
public boolean accept(File file) {
return file.getPath().matches(FILE_PATTERN);
}
public String getDescription() {
return "Images (jpg, bmp, png)";
}
});
blueboxImgPanel = new ImagePanel();
blueboxImgPanel.setBounds(510, 350, 320, 240);
add(blueboxImgPanel);
try {
camBlueboxPanel = new VideoCamPanel(510, 40);
camBlueboxPanel.startCamera();
// camBlueboxPanel.addFilter(new GreyFilter());
// camBlueboxPanel.addFilter(new InvertFilter());
camBlueboxPanel.addFilter(new BlueboxFilter(bckgrdImgPanel, blueboxImgPanel));
add(camBlueboxPanel);
}
catch (Exception e) {
e.printStackTrace();
}
}
private void captureBackgroundImage() {
try {
bckgrdImgPanel.setImage(camPanel.getClonedCopyOfCurrentImage());
}
catch (Exception e) {
e.printStackTrace();
}
}
private void captureBlueboxImage() {
try {
blueboxImgPanel.setImage(camPanel.getClonedCopyOfCurrentImage());
}
catch (Exception e) {
e.printStackTrace();
}
}
private void loadBlueboxImage() {
fileChooser.setSelectedFile(null);
if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
try {
blueboxImgPanel.setImage(ImageIO.read(fileChooser.getSelectedFile()));
}
catch (IOException ex) {
ex.printStackTrace();
}
}
}
public static void main(String[] args) {
new MainFrame().setVisible(true);
}
}