//import WebCam.Webcam;
//import hep.aida.ref.Converter;
import javax.swing.JFileChooser;
import javax.swing.SwingUtilities;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;
import javax.swing.JButton;
import javax.swing.JComboBox;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.border.BevelBorder;
import javax.swing.border.TitledBorder;
import javax.swing.*;
import java.awt.color.ColorSpace;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.awt.image.DataBufferByte;
import java.awt.image.RenderedImage;
import java.awt.image.WritableRaster;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import de.humatic.dsj.DSCapture;
import de.humatic.dsj.DSFilterInfo;
import de.humatic.dsj.DSFiltergraph;
import java.util.HashMap;
public class Presente extends JFrame implements PropertyChangeListener {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JButton jbtCapturaImagem = null;
private List<DSFilterInfo> filterInfoList = null;
private HashMap<String, DSFilterInfo> hashCams = new HashMap<String, DSFilterInfo>();
private JPanel jPanelImagem = null;
private JPanel jPanelImagem1 = null;
private DSCapture graph;
private DSFilterInfo[][] dsivideo;
DSFilterInfo[][] dsi = DSCapture.queryDevices();
DSFilterInfo[][] dsiVideo = DSCapture.queryDevices(DSCapture.SKIP_AUDIO);
private JButton jbtIniciarImagem = null;
private JButton jbtLimparImagem = null;
private JButton jbtSalvarImagem = null;
private JButton jbtComparar = null;
private JLabel jlbTitulo = null;
private JLabel jlbBlog = null;
private JButton getJbtCapturaImagem() {
if (jbtCapturaImagem == null) {
jbtCapturaImagem = new JButton();
jbtCapturaImagem.setBounds(new Rectangle(310, 500, 122, 36));
jbtCapturaImagem.setText("Captura");
jbtCapturaImagem.setToolTipText("Captura");
jbtCapturaImagem.setCursor(new Cursor(Cursor.HAND_CURSOR));
jbtCapturaImagem.setEnabled(false);
jbtCapturaImagem
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
// para a imagem da camera
graph.stop();
jbtCapturaImagem.setEnabled(false);
jbtLimparImagem.setEnabled(true);
jbtSalvarImagem.setEnabled(true);
}
});
}
return jbtCapturaImagem;
}
private JPanel getJPanelImagem() {
if (jPanelImagem == null) {
jPanelImagem = new JPanel();
jPanelImagem.setLayout(null);
jPanelImagem.setBounds(new Rectangle(10, 60, 220, 270));
jPanelImagem.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createBevelBorder(BevelBorder.LOWERED),
"Camera", TitledBorder.CENTER,
TitledBorder.DEFAULT_POSITION, new Font("Arial", Font.BOLD,
18), new Color(2, 144, 255)));
}
return jPanelImagem;
}
/****************************************/
private JPanel getJPanelImagem1() { // imagem a ser comparada
if (jPanelImagem1 == null) {
jPanelImagem1 = new JPanel();
jPanelImagem1.setLayout(null);
jPanelImagem1.setBounds(new Rectangle(300, 60, 220, 270));
jPanelImagem1.setBorder(BorderFactory.createTitledBorder(
BorderFactory.createBevelBorder(BevelBorder.LOWERED),
"Imagem", TitledBorder.CENTER,
TitledBorder.DEFAULT_POSITION, new Font("Arial", Font.BOLD,
18), new Color(2, 144, 255)));
}
return jPanelImagem1;
}
private JButton getjbtComparar() {
if (jbtComparar == null) {
jbtComparar = new JButton();
jbtComparar.setBounds(new Rectangle(400, 400, 122, 36));
jbtComparar.setText("Comparar");
jbtComparar.setToolTipText("Comparar");
jbtComparar.setCursor(new Cursor(Cursor.HAND_CURSOR));
jbtComparar.setEnabled(false);
jbtComparar
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
clearImage();
jbtLimparImagem.setEnabled(false);
jbtSalvarImagem.setEnabled(false);
jbtIniciarImagem.setEnabled(true);
}
});
}
return jbtComparar;
}
/***************************************/
private JButton getJbtIniciarImagem() {
if (jbtIniciarImagem == null) {
jbtIniciarImagem = new JButton();
jbtIniciarImagem.setBounds(new Rectangle(30, 500, 122, 36));
jbtIniciarImagem.setText("Start");
jbtIniciarImagem.setToolTipText("Start");
jbtIniciarImagem.setCursor(new Cursor(Cursor.HAND_CURSOR));
jbtIniciarImagem
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
try {
clearImage();
comCamerasActionPerformed(null);
jPanelImagem.add(graph.asComponent());
graph.setPreview();
jbtIniciarImagem.setEnabled(false);
jbtCapturaImagem.setEnabled(true);
} catch (Exception ex) {
}
}
});
}
return jbtIniciarImagem;
}
private JButton getJbtLimparImagem() {
if (jbtLimparImagem == null) {
jbtLimparImagem = new JButton();
jbtLimparImagem.setBounds(new Rectangle(450, 500, 122, 36));
jbtLimparImagem.setText("Limpar");
jbtLimparImagem.setToolTipText("Limpar");
jbtLimparImagem.setCursor(new Cursor(Cursor.HAND_CURSOR));
jbtLimparImagem.setEnabled(false);
jbtLimparImagem
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
clearImage();
jbtLimparImagem.setEnabled(false);
jbtSalvarImagem.setEnabled(false);
jbtIniciarImagem.setEnabled(true);
}
});
}
return jbtLimparImagem;
}
private JButton getJbtSalvarImagem() {
if (jbtSalvarImagem == null) {
jbtSalvarImagem = new JButton();
jbtSalvarImagem.setBounds(new Rectangle(170, 500, 122, 36));
jbtSalvarImagem.setText("Salvar");
jbtSalvarImagem.setToolTipText("Salvar");
jbtSalvarImagem.setCursor(new Cursor(Cursor.HAND_CURSOR));
jbtSalvarImagem.setEnabled(false);
jbtSalvarImagem
.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
record();
jbtLimparImagem.setEnabled(false);
jbtSalvarImagem.setEnabled(false);
jbtIniciarImagem.setEnabled(true);
}
});
}
return jbtSalvarImagem;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Presente thisClass = new Presente();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}
public Presente() {
super();
initialize();
chargeCams();
}
private void initialize() {
this.setSize(600, 600);
this.setContentPane(getJContentPane());
this.setTitle(" Prsente Professor 1.0");
// Tamanho fixo do programa, sem alte��o
this.setResizable(false);
// Deixa o programa no meio da tela, centralizado
this.setLocationRelativeTo(null);
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jlbBlog = new JLabel();
jlbBlog.setBounds(new Rectangle(129, 550, 199, 18));
// Centraliza um texto em uma Label
jlbBlog.setHorizontalAlignment(SwingConstants.CENTER);
jlbBlog.setText("http://disciplinas.dcc.ufba.br/MATA54/WebHome");
jlbBlog.setToolTipText("Blog");
jlbBlog.setCursor(new Cursor(Cursor.HAND_CURSOR));
jlbBlog.setForeground(Color.BLUE);
jlbBlog.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
// Pega o valor da url
String url = "http://disciplinas.dcc.ufba.br/MATA54/WebHome";
// Passa valor da URL para classe que realiza a
// abertura do Browser
//BareBonesBrowserLaunch.openURL(url);
}
});
jlbTitulo = new JLabel();
jlbTitulo.setBounds(new Rectangle(1, 1, 580, 40));
jlbTitulo.setFont(new Font("Arial", Font.BOLD, 28));
// Centraliza um texto em uma Label
jlbTitulo.setHorizontalAlignment(SwingConstants.CENTER);
jlbTitulo.setText("Presente Professor");
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJbtCapturaImagem(), null);
jContentPane.add(getJPanelImagem1(),null);
jContentPane.add(getjbtComparar(),null);
jContentPane.add(getJPanelImagem(), null);
jContentPane.add(getJbtIniciarImagem(), null);
jContentPane.add(getJbtLimparImagem(), null);
jContentPane.add(getJbtSalvarImagem(), null);
jContentPane.add(jlbTitulo, null);
jContentPane.add(jlbBlog, null);
}
return jContentPane;
}
public void propertyChange(PropertyChangeEvent evt) {
}
public List<DSFilterInfo> getVideoDevices() {
DSFilterInfo[][] lista = null;
try {
lista = DSCapture.queryDevices();
} catch (Exception e) {
e.printStackTrace();
}
return Arrays.asList(lista[0]);
}
// Metodo mudar cameras
public void chargeCams() {
try {
filterInfoList = getVideoDevices();
String[] camNames = new String[filterInfoList.size()];
camNames[0] = "";
for (int i = 0; i < filterInfoList.size(); i++) {
if (!filterInfoList.get(i).getName().equalsIgnoreCase("none")) {
camNames[i + 1] = filterInfoList.get(i).getName();
hashCams.put(filterInfoList.get(i).getName(),
filterInfoList.get(i));
}
}
//comCameras.setModel(new DefaultComboBoxModel<Object>(camNames));
} catch (Exception e) {
e.printStackTrace();
}
}
private void comCamerasActionPerformed(ActionEvent e) {
dsivideo = DSCapture.queryDevices(DSCapture.SKIP_AUDIO);
graph = new DSCapture(DSFiltergraph.RENDER_NATIVE, dsivideo[0][0],
false, DSFilterInfo.doNotRender(), this);
// Largura e Altura da imagem
graph.setSize(800, 600);
BufferedImage recorte = graph.getImage().getSubimage(175, 150, 250, 300);
jPanelImagem.add(recorte);
//graph.setPreview();
}
// Metodo capturar imagem
public BufferedImage getImage() {
if (graph == null) {
return null;
} else {
return graph.getImage();
}
}
// Metodo Salvar imagem
public void record() {
try {
BufferedImage image1=null, image2 = null;
image1 = graph.getImage();
image2 = image1.getSubimage(275, 150, 250, 300);
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
ColorConvertOp op = new ColorConvertOp(cs, null);
image1 = op.filter(image2, null);
BufferedImage image3 = image1.getSubimage(0, 0, 125, 150);
File outputfile = new File("C://temp.png");
JFileChooser jf = new JFileChooser();
jf.setMultiSelectionEnabled(false);
jf.showSaveDialog(jPanelImagem);
if (jf.getSelectedFile() != null) {
ImageIO.write(image3, "png", outputfile);
}
} catch (IOException ex) {
ex.printStackTrace();
}
graph.dispose();
}
// Metodo limpar imagem
public void clearImage() {
if (graph != null) {
jPanelImagem.remove(graph);
graph.dispose();
dsivideo = null;
}
repaint();
}
} // @jve:decl-index=0:visual-constraint="13,-26"