我的处女作《Canvas系列教程》在我的Github上正在连载更新,希望能得到您的关注和支持,让我有更多的动力进行创作。
教程介绍、教程目录等能在README里查阅。
目录
概述
Java嵌入带有Swing视频流的Jpanel
核心工具
webcam-capture:多平台兼容的摄像头驱动 https://github.com/sarxos/webcam-capture
SwingNode:JavaFX自带的一个class,实现JavaFX嵌入Swing
(IDE:IDEA)
主要过程
- 按照webcam-capture官方给的方法导入驱动包
2、不要忘记导入javafx的包
3、jdk最好选择11以下,不然要配置很多东西,推荐JDK8
4、主程序代码
package sample;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
/*
VideoPane摄像头视频面板
*/
VideoPanel videoPanel = new VideoPanel();
StackPane stackPane = new StackPane();
stackPane.getChildren().add(videoPanel.getVideoPanel());
primaryStage.setTitle("JavaFX嵌入通过swing调用的摄像头");
primaryStage.setScene(new Scene(stackPane, 800, 600));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
5、我把嵌入视频的swing组件Jpanel抽出来一个JavaFX的组件VideoPanel
调用方法new VideoPanel().getVideoPanel();
ViedoPanel代码:
package sample;
import com.github.sarxos.webcam.Webcam;
import com.github.sarxos.webcam.WebcamPanel;
import com.github.sarxos.webcam.WebcamResolution;
import javafx.embed.swing.SwingNode;
import javax.swing.*;
public class VideoPanel {
public SwingNode getVideoPanel() {
final SwingNode swingNode = new SwingNode();
createSwingContent(swingNode);
return swingNode;
}
private void createSwingContent(final SwingNode swingNode) {
SwingUtilities.invokeLater(() -> {
/*Swing中的调用摄像头方法*/
Webcam webcam = Webcam.getDefault();
webcam.setViewSize(WebcamResolution.VGA.getSize());
WebcamPanel panel = new WebcamPanel(webcam);
panel.setFPSDisplayed(true);
panel.setDisplayDebugInfo(true);
panel.setImageSizeDisplayed(true);
panel.setMirrored(true);
swingNode.setContent(panel);
});
}
}
6、当然要遮住我英俊潇洒的脸