السلام عليكم
كثيرا ما عانيت من مكتبة JMF وعدم عملها مع انظمة 64 بت
والحمد لله وجدت المكتبة JMyron التي تعمل على انظمة 32 و 64 بت وكذلك يمكنها متابعة اللوان
والطريقة سهلة بعد فتح الملف المضغوط
1- يتم نسخ ملفات ال DLL الى C:\windows\System32
2- استدعاء JMyron.jar الى مشروعك
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;
import JMyron.JMyron;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
public class TestWebCam extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JTextField jTxtTolarane;
private JLabel lblCameraView;
private JLabel lblStillImage;
private JColorChooser jcolorchooser;
private JLabel lblTolarance;
private JMyron m;//a camera object
private int width = 320;
private int height = 240;
private int frameRate = 10; //fps
private boolean captureOn;
private BufferedImage captureImage;
private int[] imageIntArray;
//private int cR = 255, cG = 255, cB = 255;
/**
* Launch the application.
*/
public static void main(String[] args) {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
try {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
} catch (ClassNotFoundException | InstantiationException
| IllegalAccessException
| UnsupportedLookAndFeelException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TestWebCam frame = new TestWebCam();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public TestWebCam() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 675, 807);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
GridBagLayout gbl_contentPane = new GridBagLayout();
gbl_contentPane.columnWidths = new int[]{66, 180, 246, 0};
gbl_contentPane.rowHeights = new int[]{276, 325, 22, 50, 25, 0};
gbl_contentPane.columnWeights = new double[]{0.0, 0.0, 0.0, Double.MIN_VALUE};
gbl_contentPane.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
contentPane.setLayout(gbl_contentPane);
JButton btnStart = new JButton("Start");
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
startCapture();
}
});
lblStillImage = new JLabel("");
lblStillImage.setBackground(new java.awt.Color(102, 102, 102));
lblStillImage.setForeground(new java.awt.Color(102, 102, 102));
lblStillImage.setBorder(javax.swing.BorderFactory.createEtchedBorder());
lblStillImage.setPreferredSize(new java.awt.Dimension(320, 240));
GridBagConstraints gbc_lblStillImage = new GridBagConstraints();
gbc_lblStillImage.fill = GridBagConstraints.BOTH;
gbc_lblStillImage.insets = new Insets(0, 0, 5, 5);
gbc_lblStillImage.gridwidth = 2;
gbc_lblStillImage.gridx = 0;
gbc_lblStillImage.gridy = 0;
contentPane.add(lblStillImage, gbc_lblStillImage);
lblCameraView = new JLabel("");
lblCameraView.setBackground(new java.awt.Color(102, 102, 102));
lblCameraView.setForeground(new java.awt.Color(102, 102, 102));
lblCameraView.setBorder(javax.swing.BorderFactory.createEtchedBorder());
lblCameraView.setPreferredSize(new java.awt.Dimension(320, 240));
GridBagConstraints gbc_lblCameraView = new GridBagConstraints();
gbc_lblCameraView.fill = GridBagConstraints.BOTH;
gbc_lblCameraView.insets = new Insets(0, 0, 5, 0);
gbc_lblCameraView.gridx = 2;
gbc_lblCameraView.gridy = 0;
contentPane.add(lblCameraView, gbc_lblCameraView);
jcolorchooser=new JColorChooser();
//jcolorchooser.setLocation(0, 0);
GridBagConstraints gbc_jcolorchooser = new GridBagConstraints();
gbc_jcolorchooser.fill = GridBagConstraints.BOTH;
gbc_jcolorchooser.insets = new Insets(0, 0, 5, 0);
gbc_jcolorchooser.gridwidth = 3;
gbc_jcolorchooser.gridx = 0;
gbc_jcolorchooser.gridy = 1;
contentPane.add(jcolorchooser, gbc_jcolorchooser);
lblTolarance = new JLabel("Tolarance");
GridBagConstraints gbc_lblTolarance = new GridBagConstraints();
gbc_lblTolarance.fill = GridBagConstraints.HORIZONTAL;
gbc_lblTolarance.insets = new Insets(0, 0, 5, 5);
gbc_lblTolarance.gridx = 0;
gbc_lblTolarance.gridy = 2;
contentPane.add(lblTolarance, gbc_lblTolarance);
jTxtTolarane = new JTextField();
jTxtTolarane.setText("10");
GridBagConstraints gbc_jTxtTolarane = new GridBagConstraints();
gbc_jTxtTolarane.anchor = GridBagConstraints.NORTHWEST;
gbc_jTxtTolarane.insets = new Insets(0, 0, 5, 5);
gbc_jTxtTolarane.gridx = 1;
gbc_jTxtTolarane.gridy = 2;
contentPane.add(jTxtTolarane, gbc_jTxtTolarane);
jTxtTolarane.setColumns(10);
GridBagConstraints gbc_btnStart = new GridBagConstraints();
gbc_btnStart.anchor = GridBagConstraints.NORTHWEST;
gbc_btnStart.insets = new Insets(0, 0, 0, 5);
gbc_btnStart.gridwidth = 2;
gbc_btnStart.gridx = 0;
gbc_btnStart.gridy = 4;
contentPane.add(btnStart, gbc_btnStart);
}
private void configureMycron() {
m = new JMyron();//make a new instance of the object
m.start(width, height);//start a capture at 320x240
//m.findGlobs(0);//disable the intelligence to speed up frame rate
m.findGlobs(1);
int tol=Integer.parseInt(jTxtTolarane.getText());
m.trackColor(jcolorchooser.getColor().getRed(),
jcolorchooser.getColor().getGreen(),
jcolorchooser.getColor().getBlue(), tol);
//set labels
lblCameraView.setBounds(new Rectangle(width, height));
}
private void getCameraImage() {
captureImage = new BufferedImage(width, height, BufferedImage.OPAQUE);
m.update();//update the camera view
imageIntArray = m.image(); //get the normal image of the camera
captureImage.setRGB(0, 0, width, height, imageIntArray, 0, width);
}
private void startCapture() {
configureMycron();
captureOn = true;
Runnable capture = new Runnable() {
public void run() {
while (captureOn) {
try {
getCameraImage();
lblCameraView.setIcon(new ImageIcon(captureImage));
//lblStillImage.setIcon(new ImageIcon(bi));
test();
Thread.sleep(frameRate);
// repaint();
} catch (InterruptedException ex) {
// Logger.getLogger(JmyronWebCam.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
};
Thread t = new Thread(capture);
t.start();
lblCameraView.setSize(width,height);
lblStillImage.setSize(width, height);
//jButtonStart.setEnabled(false);
}
private void test() {
//lblStillImage.setIcon(new ImageIcon(captureImage));
Graphics g2d = lblStillImage.getGraphics();
g2d.drawImage(captureImage, 0, 0, rootPane);
int[][] globBoxes = m.globBoxes();
for (int i = 0; i < globBoxes.length; i++) {
int[] boxArray = globBoxes;
int x=boxArray[0];
int y=boxArray[1];
int w=boxArray[2];
int h=boxArray[3];
g2d.setColor(Color.RED);
g2d.drawRect(x, y, w, h);
}
lblStillImage.paintComponents(g2d);
lblStillImage.validate();
this.validate();
}
}تحياتي وسلامي
للجميع
:blush: :blush: :blush:
