TelaTakeFoto.java Source code

Java tutorial

Introduction

Here is the source code for TelaTakeFoto.java

Source

/*
 * 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
}