initial
This commit is contained in:
53
src/main/java/com/jsca/WebcamStreamReader.java
Normal file
53
src/main/java/com/jsca/WebcamStreamReader.java
Normal file
@@ -0,0 +1,53 @@
|
||||
package com.jsca;
|
||||
|
||||
import com.github.sarxos.webcam.Webcam;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Image;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
public class WebcamStreamReader implements StreamReader {
|
||||
private final CameraPanel panel;
|
||||
private volatile boolean running = true;
|
||||
private Webcam webcam;
|
||||
|
||||
public WebcamStreamReader(CameraPanel panel) {
|
||||
this.panel = panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
webcam = Webcam.getDefault();
|
||||
if (webcam == null) {
|
||||
throw new RuntimeException("No webcam detected");
|
||||
}
|
||||
|
||||
webcam.setViewSize(new Dimension(640, 480));
|
||||
webcam.open();
|
||||
|
||||
while (running && webcam.isOpen()) {
|
||||
final Image image = webcam.getImage();
|
||||
if (image != null) {
|
||||
SwingUtilities.invokeLater(() -> panel.updateFrame(image));
|
||||
}
|
||||
Thread.sleep(33); // ~30 FPS
|
||||
}
|
||||
} catch (Exception e) {
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
javax.swing.JOptionPane.showMessageDialog(panel,
|
||||
"Error reading from webcam: " + e.getMessage(),
|
||||
"Webcam Error",
|
||||
javax.swing.JOptionPane.ERROR_MESSAGE);
|
||||
});
|
||||
} finally {
|
||||
if (webcam != null && webcam.isOpen()) {
|
||||
webcam.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
running = false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user