Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.Point; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.awt.image.DataBufferByte; import java.awt.image.WritableRaster; import java.io.ByteArrayInputStream; import java.io.File; import java.util.Date; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFileChooser; import org.opencv.core.Core; import org.opencv.core.CvType; import org.opencv.core.Mat; import org.opencv.core.MatOfByte; import org.opencv.core.Scalar; import org.opencv.highgui.Highgui; import org.opencv.highgui.VideoCapture; import org.opencv.imgproc.Imgproc; /** * * @author Dcio */ public class TelaTakeFoto extends javax.swing.JFrame { private static int SOURCE_CAM = 1; private static int FILTER_NUMBER = 1; private static String resultado; private Date dateFilePicture; private DaemonThreadCamFoto myThreadCamFoto = null; private static int DELAY_CAM = 50; private static int openFrameCount = 0; //teste private static final int xOffset = 30, yOffset = 30; //teste int count = 0; //VideoCapture webSource = null; VideoCapture camFoto = null; Mat frame = new Mat(); MatOfByte mem = new MatOfByte(); /** * Creates new form TelaTakeFoto */ public TelaTakeFoto() { initComponents(); this.setTitle("Faa sua Fotografia de Cadastro"); String pathProjeto = System.getProperty("user.dir") + "//"; String iconPetfast = pathProjeto + "src//Icones//petfastIcone.png"; setIconImage(Toolkit.getDefaultToolkit().getImage(iconPetfast)); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = getSize(); setLocation(xOffset * openFrameCount, yOffset * openFrameCount); setLocation(new Point((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.width) / 2)); cmdAjusteCam.setEnabled(false); cmdTakePicture.setEnabled(true); cmdDelPicture.setEnabled(false); lblCamUsada.setText(jSliderCam.getValue() + ""); this.repaint(); iniciarCam(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jFileChooserFoto1 = new javax.swing.JFileChooser(); jPanel2 = new javax.swing.JPanel(); lblFotoTake = new javax.swing.JLabel(); cmdTakePicture = new javax.swing.JButton(); jPanel3 = new javax.swing.JPanel(); lblLastFoto = new javax.swing.JLabel(); jPanelCam = new javax.swing.JPanel(); jSliderCam = new javax.swing.JSlider(); lblCamUsada = new javax.swing.JLabel(); jPanelFiltro = new javax.swing.JPanel(); jSliderFiltro = new javax.swing.JSlider(); lblNumFiltro = new javax.swing.JLabel(); jPanelBotoeira = new javax.swing.JPanel(); lblFotoCaminho = new javax.swing.JLabel(); cmdDelPicture = new javax.swing.JButton(); cmdSairTakePicture = new javax.swing.JButton(); cmdAjusteCam = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setMaximumSize(new java.awt.Dimension(950, 825)); setMinimumSize(new java.awt.Dimension(633, 514)); addComponentListener(new java.awt.event.ComponentAdapter() { public void componentResized(java.awt.event.ComponentEvent evt) { formComponentResized(evt); } }); addPropertyChangeListener(new java.beans.PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent evt) { formPropertyChange(evt); } }); jPanel2.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 255), 10, true)); lblFotoTake.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(204, 23, 204), 4)); cmdTakePicture.setBackground(new java.awt.Color(120, 12, 0)); cmdTakePicture.setFont(new java.awt.Font("Arial", 1, 24)); // NOI18N cmdTakePicture.setText("Tirar Foto"); cmdTakePicture.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cmdTakePictureActionPerformed(evt); } }); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup(jPanel2Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup().addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblFotoTake, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(cmdTakePicture, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap())); jPanel2Layout.setVerticalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup().addContainerGap() .addComponent(lblFotoTake, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(cmdTakePicture, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap())); jPanel3.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(255, 0, 0), 4, true)); lblLastFoto.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(27, 204, 204), 4)); jPanelCam.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(25, 25, 25), 4, true)); jSliderCam.setMaximum(3); jSliderCam.setOrientation(javax.swing.JSlider.VERTICAL); jSliderCam.setPaintLabels(true); jSliderCam.setPaintTicks(true); jSliderCam.setSnapToTicks(true); jSliderCam.setToolTipText("Alterar a Webcam conectada e Ajusta a Tela"); jSliderCam.setValue(1); jSliderCam.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 255, 0), 3, true)); jSliderCam.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); jSliderCam.setValueIsAdjusting(true); jSliderCam.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { jSliderCamStateChanged(evt); } }); lblCamUsada.setFont(new java.awt.Font("Arial", 1, 18)); // NOI18N lblCamUsada.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); lblCamUsada.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 255, 0), 3)); javax.swing.GroupLayout jPanelCamLayout = new javax.swing.GroupLayout(jPanelCam); jPanelCam.setLayout(jPanelCamLayout); jPanelCamLayout.setHorizontalGroup(jPanelCamLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelCamLayout.createSequentialGroup().addContainerGap().addGroup(jPanelCamLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblCamUsada, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanelCamLayout.createSequentialGroup() .addComponent(jSliderCam, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 10, Short.MAX_VALUE))) .addContainerGap())); jPanelCamLayout.setVerticalGroup(jPanelCamLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelCamLayout.createSequentialGroup() .addGap(6, 6, 6) .addComponent(lblCamUsada, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jSliderCam, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) .addGap(28, 28, 28))); jPanelFiltro.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(25, 25, 25), 4, true)); jSliderFiltro.setForeground(new java.awt.Color(240, 240, 0)); jSliderFiltro.setMaximum(5); jSliderFiltro.setOrientation(javax.swing.JSlider.VERTICAL); jSliderFiltro.setPaintLabels(true); jSliderFiltro.setPaintTicks(true); jSliderFiltro.setSnapToTicks(true); jSliderFiltro.setToolTipText("Alterar a Webcam conectada e Ajusta a Tela"); jSliderFiltro.setValue(0); jSliderFiltro.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(240, 240, 0), 3, true)); jSliderFiltro.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); jSliderFiltro.setValueIsAdjusting(true); jSliderFiltro.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { jSliderFiltroStateChanged(evt); } }); lblNumFiltro.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N lblNumFiltro.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); lblNumFiltro.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(240, 240, 0), 3)); javax.swing.GroupLayout jPanelFiltroLayout = new javax.swing.GroupLayout(jPanelFiltro); jPanelFiltro.setLayout(jPanelFiltroLayout); jPanelFiltroLayout.setHorizontalGroup(jPanelFiltroLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelFiltroLayout.createSequentialGroup().addContainerGap().addGroup(jPanelFiltroLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblNumFiltro, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanelFiltroLayout.createSequentialGroup() .addComponent(jSliderFiltro, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 10, Short.MAX_VALUE))) .addContainerGap())); jPanelFiltroLayout.setVerticalGroup(jPanelFiltroLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelFiltroLayout.createSequentialGroup() .addGap(6, 6, 6) .addComponent(lblNumFiltro, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jSliderFiltro, javax.swing.GroupLayout.DEFAULT_SIZE, 171, Short.MAX_VALUE) .addGap(28, 28, 28))); javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup(jPanel3Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup().addContainerGap().addGroup(jPanel3Layout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(lblLastFoto, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel3Layout.createSequentialGroup() .addComponent(jPanelCam, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanelFiltro, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap())); jPanel3Layout.setVerticalGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup().addContainerGap() .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanelFiltro, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanelCam, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(lblLastFoto, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap())); jPanelBotoeira.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 4, true)); lblFotoCaminho.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); cmdDelPicture.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N cmdDelPicture.setText("Apagar"); cmdDelPicture.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cmdDelPictureActionPerformed(evt); } }); cmdSairTakePicture.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N cmdSairTakePicture.setText("Sair"); cmdSairTakePicture.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cmdSairTakePictureActionPerformed(evt); } }); cmdAjusteCam.setBackground(new java.awt.Color(240, 240, 0)); cmdAjusteCam.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N cmdAjusteCam.setText("Ajuste Cam"); cmdAjusteCam.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cmdAjusteCamActionPerformed(evt); } }); javax.swing.GroupLayout jPanelBotoeiraLayout = new javax.swing.GroupLayout(jPanelBotoeira); jPanelBotoeira.setLayout(jPanelBotoeiraLayout); jPanelBotoeiraLayout.setHorizontalGroup( jPanelBotoeiraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelBotoeiraLayout.createSequentialGroup().addContainerGap() .addGroup(jPanelBotoeiraLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelBotoeiraLayout.createSequentialGroup() .addComponent(lblFotoCaminho, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) .addGroup(jPanelBotoeiraLayout.createSequentialGroup() .addComponent(cmdSairTakePicture, javax.swing.GroupLayout.DEFAULT_SIZE, 124, Short.MAX_VALUE) .addGap(91, 91, 91).addComponent(cmdAjusteCam).addGap(116, 116, 116) .addComponent(cmdDelPicture, javax.swing.GroupLayout.DEFAULT_SIZE, 124, Short.MAX_VALUE) .addGap(29, 29, 29))))); jPanelBotoeiraLayout.setVerticalGroup( jPanelBotoeiraLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanelBotoeiraLayout.createSequentialGroup().addGroup(jPanelBotoeiraLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(jPanelBotoeiraLayout .createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(cmdSairTakePicture, javax.swing.GroupLayout.DEFAULT_SIZE, 41, Short.MAX_VALUE) .addComponent(cmdDelPicture, javax.swing.GroupLayout.DEFAULT_SIZE, 42, Short.MAX_VALUE)) .addComponent(cmdAjusteCam, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(lblFotoCaminho, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap())); jPanelBotoeiraLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] { cmdDelPicture, cmdSairTakePicture }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup().addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanelBotoeira, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap())); layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup().addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanelBotoeira, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap())); pack(); }// </editor-fold>//GEN-END:initComponents /** * Mtodo img2Mat : BufferedImage to Mat * * @param in * @return */ public static Mat img2Mat(BufferedImage in) { Mat out = new Mat(in.getHeight(), in.getWidth(), CvType.CV_8UC3); byte[] data = new byte[in.getWidth() * in.getHeight() * (int) out.elemSize()]; int[] dataBuff = in.getRGB(0, 0, in.getWidth(), in.getHeight(), null, 0, in.getWidth()); for (int i = 0; i < dataBuff.length; i++) { data[i * 3] = (byte) ((dataBuff[i])); data[i * 3 + 1] = (byte) ((dataBuff[i])); data[i * 3 + 2] = (byte) ((dataBuff[i])); } out.put(0, 0, data); return out; }//Final mtodo img2Mat private void cmdTakePictureActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdTakePictureActionPerformed // TODO add your handling code here: cmdDelPicture.setEnabled(true); jFileChooserFoto1.addChoosableFileFilter(new TextFilter()); int returnVal = jFileChooserFoto1.showSaveDialog(this); if (returnVal == jFileChooserFoto1.APPROVE_OPTION) { File file = jFileChooserFoto1.getSelectedFile(); Highgui.imwrite(file.getPath(), frame); //matfoto = Highgui.imread(file.getAbsolutePath().toString(), 0); Dimension d = lblFotoTake.getSize(); Dimension dl = lblLastFoto.getSize(); ImageIcon foto; ImageIcon fotoLast; foto = new ImageIcon(file.getPath()); fotoLast = new ImageIcon(file.getPath()); int widthFoto = d.width; int heightFoto = d.height; int widthLastFoto = dl.width; int heightLastFoto = dl.height; foto.setImage(foto.getImage().getScaledInstance(widthFoto, heightFoto, 100)); fotoLast.setImage(foto.getImage().getScaledInstance(widthLastFoto, heightLastFoto, 100)); lblFotoCaminho.setText(file.getAbsolutePath()); //lblFotoTake.setIcon(foto); lblLastFoto.setIcon(fotoLast); //verificaFile(file); //verifica o arquivo //lblPetFotoCaminho.setText(file.getAbsolutePath()+" - Criada em: "+ dateFile2); } else { System.out.println("File access cancelled by user."); } }//GEN-LAST:event_cmdTakePictureActionPerformed private void cmdSairTakePictureActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdSairTakePictureActionPerformed // TODO add your handling code here: stopCamFoto(); try { Thread.sleep(DELAY_CAM * 4); } catch (InterruptedException ex) { System.out.println("Erro na classe telaTakeFoto.java: " + ex); Logger.getLogger(TelaTakeFoto.class.getName()).log(Level.SEVERE, null, ex); } this.dispose(); }//GEN-LAST:event_cmdSairTakePictureActionPerformed private void jSliderCamStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_jSliderCamStateChanged // TODO add your handling code here: stopCamFoto(); cleanCamFoto(); iniciarCam(); }//GEN-LAST:event_jSliderCamStateChanged private void cmdDelPictureActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdDelPictureActionPerformed // TODO add your handling code here: File file = new File(lblFotoCaminho.getText()); if (file.delete()) { System.out.println("deletado"); lblLastFoto.setIcon(null); lblFotoCaminho.setText(null); cmdDelPicture.setEnabled(false); } else { System.out.println("Erro ao Deletar arquivo"); } this.repaint(); }//GEN-LAST:event_cmdDelPictureActionPerformed private void formPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_formPropertyChange }//GEN-LAST:event_formPropertyChange private void cmdAjusteCamActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdAjusteCamActionPerformed // TODO add your handling code here: stopCamFoto(); iniciarCam(); cmdAjusteCam.setEnabled(false); this.repaint(); }//GEN-LAST:event_cmdAjusteCamActionPerformed private void formComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentResized // TODO add your handling code here: cmdAjusteCam.setEnabled(true); }//GEN-LAST:event_formComponentResized private void jSliderFiltroStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_jSliderFiltroStateChanged // TODO add your handling code here: }//GEN-LAST:event_jSliderFiltroStateChanged /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(TelaTakeFoto.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(TelaTakeFoto.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(TelaTakeFoto.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(TelaTakeFoto.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // load native library of opencv /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new TelaTakeFoto().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton cmdAjusteCam; private javax.swing.JButton cmdDelPicture; private javax.swing.JButton cmdSairTakePicture; private javax.swing.JButton cmdTakePicture; private javax.swing.JFileChooser jFileChooserFoto1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanelBotoeira; private javax.swing.JPanel jPanelCam; private javax.swing.JPanel jPanelFiltro; private javax.swing.JSlider jSliderCam; private javax.swing.JSlider jSliderFiltro; private javax.swing.JLabel lblCamUsada; private javax.swing.JLabel lblFotoCaminho; private javax.swing.JLabel lblFotoTake; private javax.swing.JLabel lblLastFoto; private javax.swing.JLabel lblNumFiltro; // End of variables declaration//GEN-END:variables /** * Mtodo para iniciar a webcam disponvel */ private void iniciarCam() { // TODO add youcr handling code here: //webSource = new VideoCapture(1); camFoto = new VideoCapture(SOURCE_CAM); //Delay para verifica se a cam abriu e habilitar o boto de tirar foto try { // Thread.sleep(DELAY_CAM * 6); if (!camFoto.isOpened()) { cmdTakePicture.setEnabled(false); } else { cmdTakePicture.setEnabled(true); } } catch (Exception e) { e.printStackTrace(); } //myThread = new DaemonThread(); //Thread t = new Thread(myThread); myThreadCamFoto = new DaemonThreadCamFoto(); Thread tCam1 = new Thread(myThreadCamFoto); //t.setDaemon(true); tCam1.setDaemon(true); // myThread.runnable = true; myThreadCamFoto.runnable = true; //t.start(); tCam1.start(); }// final mtodo iniciarCam /** * Mtodo para para a webcam ajustada * */ private void stopCamFoto() { myThreadCamFoto.runnable = false; camFoto.release(); try { Thread.sleep(DELAY_CAM * 6); lblFotoTake.setIcon(null); } catch (Exception e) { try { Thread.sleep(DELAY_CAM * 6); } catch (InterruptedException ex) { Logger.getLogger(TelaTakeFoto.class.getName()).log(Level.SEVERE, null, ex); } e.printStackTrace(); } }//final stopCamFoto /** * Mtodo para limpar a foto */ private void cleanCamFoto() { lblFotoTake.setIcon(null); this.repaint(); }//final cleanCamFoto /** * Metodo createBufferedImage * @param mat * @return */ public static BufferedImage createBufferedImage(Mat mat) { BufferedImage image = new BufferedImage(mat.width(), mat.height(), BufferedImage.TYPE_3BYTE_BGR); WritableRaster raster = image.getRaster(); DataBufferByte dataBuffer = (DataBufferByte) raster.getDataBuffer(); byte[] data = dataBuffer.getData(); mat.get(0, 0, data); return image; } class DaemonThreadCamFoto implements Runnable { protected volatile boolean runnable = false; Dimension d = lblFotoTake.getSize(); int tamBorder = 4; //tamanho da borda do elemento label int width = d.width - tamBorder; //diminuir tamanho definido da borda label int height = d.height - tamBorder; //diminuir tamanho definido da borda label @Override public void run() { synchronized (this) { SOURCE_CAM = jSliderCam.getValue(); FILTER_NUMBER = jSliderFiltro.getValue(); while (runnable) { int x = 0; SOURCE_CAM = jSliderCam.getValue(); lblCamUsada.setText("Cam: " + jSliderCam.getValue()); lblNumFiltro.setText("Filtro: " + jSliderFiltro.getValue()); while (x < 10000) { x++; } if (camFoto.grab()) { try { camFoto.retrieve(frame); //Colocar legenda na tela Core.putText(frame, "Petfast by DAC", new org.opencv.core.Point(frame.rows() / 12, (frame.cols() / 15 * 11)), //Posio do texto na tela Core.FONT_HERSHEY_TRIPLEX, new Double(.83), new Scalar(250)); //aplicar um filtro a imagem da tela int filtroOpc = jSliderFiltro.getValue(); switch (filtroOpc) { case 0: frame = PutFiltro.mainBorda(frame); System.out.println("Esta a:" + filtroOpc); break; case 1: System.out.println("Esta a:" + filtroOpc); break; case 2: System.out.println("Esta a:" + filtroOpc); break; case 3: System.out.println("Esta a:" + filtroOpc); break; case 4: System.out.println("Esta a:" + filtroOpc); break; case 5: System.out.println("Esta a:" + filtroOpc); break; } Highgui.imencode(".bmp", frame, mem); //Highgui.imencode(".png", frame, mem); /* Parte experimentando mtodo: public static BufferedImage createBufferedImage(Mat mat) */ Image im = ImageIO.read(new ByteArrayInputStream(mem.toArray())); BufferedImage buff = (BufferedImage) im; BufferedImage teste = createBufferedImage(frame); Graphics gCam1 = lblFotoTake.getGraphics(); //if (gCam1.drawImage(buff, tamBorder, tamBorder, width, height, 0, 0, buff.getWidth(), buff.getHeight(), null)) { // Cdigo if original na linha acima, abaixo utilizo o resultado do metodo createBufferedImage() if (gCam1.drawImage(teste, tamBorder, tamBorder, width, height, 0, 0, teste.getWidth(), teste.getHeight(), null)) { cmdTakePicture.setText("Tirar Foto"); if (runnable == false) { System.out.println("Going to wait()"); this.wait(); } } else { } } catch (Exception ex) { System.out.println("Error" + "Captura video : " + ex); cmdTakePicture.setText("Aguarde Procurando Webcam..."); } } } } }//final run() } //final class DaemonThreadCamFoto }