JavaFX使用摄像头API的示例

来源:互联网 发布:utorrent端口映射 mac 编辑:程序博客网 时间:2024/05/16 08:54

在GITHUB上面有这样的示例:

它的网址是:https://github.com/sarxos/webcam-capture/tree/master/webcam-capture-examples/webcam-capture-javafx

我不知道大家是否可以访问的上这个链接,不知道有没有被墙了(因为我不在国内)。

如果有被墙的话,我上传了摄像头包,其中包含很多示例。可在这个链接上下载  http://download.csdn.net/detail/yizdream/8196815


当你附加你的LIB后,也就是摄像头包中的JAR,别忘了摄像头包里的LIB里的JAR一样要引用的。


看看示例吧,怎样在javaFX上使用这个包。

不过这里要感谢Rakesh Bhatt (rakeshbhatt10)分享了他的代码......


import java.awt.image.BufferedImage;import javafx.application.Application;import javafx.application.Platform;import javafx.beans.property.ObjectProperty;import javafx.beans.property.SimpleObjectProperty;import javafx.beans.value.ChangeListener;import javafx.beans.value.ObservableValue;import javafx.collections.FXCollections;import javafx.collections.ObservableList;import javafx.concurrent.Task;import javafx.embed.swing.SwingFXUtils;import javafx.event.ActionEvent;import javafx.event.EventHandler;import javafx.geometry.Orientation;import javafx.geometry.Pos;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.control.ComboBox;import javafx.scene.control.Label;import javafx.scene.image.Image;import javafx.scene.image.ImageView;import javafx.scene.layout.BorderPane;import javafx.scene.layout.FlowPane;import javafx.stage.Stage;import com.github.sarxos.webcam.Webcam;/** * This example demonstrates how to use Webcam Capture API in a JavaFX * application. *  * @author Rakesh Bhatt (rakeshbhatt10) */public class WebCamAppLauncher extends Application {private class WebCamInfo {private String webCamName;private int webCamIndex;public String getWebCamName() {return webCamName;}public void setWebCamName(String webCamName) {this.webCamName = webCamName;}public int getWebCamIndex() {return webCamIndex;}public void setWebCamIndex(int webCamIndex) {this.webCamIndex = webCamIndex;}@Overridepublic String toString() {return webCamName;}}private FlowPane bottomCameraControlPane;private FlowPane topPane;private BorderPane root;private String cameraListPromptText = "Choose Camera";private ImageView imgWebCamCapturedImage;private Webcam webCam = null;private boolean stopCamera = false;private BufferedImage grabbedImage;private ObjectProperty<Image> imageProperty = new SimpleObjectProperty<Image>();private BorderPane webCamPane;private Button btnCamreaStop;private Button btnCamreaStart;private Button btnCameraDispose;@Overridepublic void start(Stage primaryStage) {primaryStage.setTitle("Connecting Camera Device Using Webcam Capture API");root = new BorderPane();topPane = new FlowPane();topPane.setAlignment(Pos.CENTER);topPane.setHgap(20);topPane.setOrientation(Orientation.HORIZONTAL);topPane.setPrefHeight(40);root.setTop(topPane);webCamPane = new BorderPane();webCamPane.setStyle("-fx-background-color: #ccc;");imgWebCamCapturedImage = new ImageView();webCamPane.setCenter(imgWebCamCapturedImage);root.setCenter(webCamPane);createTopPanel();bottomCameraControlPane = new FlowPane();bottomCameraControlPane.setOrientation(Orientation.HORIZONTAL);bottomCameraControlPane.setAlignment(Pos.CENTER);bottomCameraControlPane.setHgap(20);bottomCameraControlPane.setVgap(10);bottomCameraControlPane.setPrefHeight(40);bottomCameraControlPane.setDisable(true);createCameraControls();root.setBottom(bottomCameraControlPane);primaryStage.setScene(new Scene(root));primaryStage.setHeight(700);primaryStage.setWidth(600);primaryStage.centerOnScreen();primaryStage.show();Platform.runLater(new Runnable() {@Overridepublic void run() {setImageViewSize();}});}protected void setImageViewSize() {double height = webCamPane.getHeight();double width = webCamPane.getWidth();imgWebCamCapturedImage.setFitHeight(height);imgWebCamCapturedImage.setFitWidth(width);imgWebCamCapturedImage.prefHeight(height);imgWebCamCapturedImage.prefWidth(width);imgWebCamCapturedImage.setPreserveRatio(true);}private void createTopPanel() {int webCamCounter = 0;Label lbInfoLabel = new Label("Select Your WebCam Camera");ObservableList<WebCamInfo> options = FXCollections.observableArrayList();topPane.getChildren().add(lbInfoLabel);for (Webcam webcam : Webcam.getWebcams()) {WebCamInfo webCamInfo = new WebCamInfo();webCamInfo.setWebCamIndex(webCamCounter);webCamInfo.setWebCamName(webcam.getName());options.add(webCamInfo);webCamCounter++;}ComboBox<WebCamInfo> cameraOptions = new ComboBox<WebCamInfo>();cameraOptions.setItems(options);cameraOptions.setPromptText(cameraListPromptText);cameraOptions.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<WebCamInfo>() {@Overridepublic void changed(ObservableValue<? extends WebCamInfo> arg0, WebCamInfo arg1, WebCamInfo arg2) {if (arg2 != null) {System.out.println("WebCam Index: " + arg2.getWebCamIndex() + ": WebCam Name:" + arg2.getWebCamName());initializeWebCam(arg2.getWebCamIndex());}}});topPane.getChildren().add(cameraOptions);}protected void initializeWebCam(final int webCamIndex) {Task<Void> webCamTask = new Task<Void>() {@Overrideprotected Void call() throws Exception {if (webCam != null) {disposeWebCamCamera();}webCam = Webcam.getWebcams().get(webCamIndex);webCam.open();startWebCamStream();return null;}};Thread webCamThread = new Thread(webCamTask);webCamThread.setDaemon(true);webCamThread.start();bottomCameraControlPane.setDisable(false);btnCamreaStart.setDisable(true);}protected void startWebCamStream() {stopCamera = false;Task<Void> task = new Task<Void>() {@Overrideprotected Void call() throws Exception {while (!stopCamera) {try {if ((grabbedImage = webCam.getImage()) != null) {Platform.runLater(new Runnable() {@Overridepublic void run() {Image mainiamge = SwingFXUtils.toFXImage(grabbedImage, null);imageProperty.set(mainiamge);}});grabbedImage.flush();}} catch (Exception e) {e.printStackTrace();}}return null;}};Thread th = new Thread(task);th.setDaemon(true);th.start();imgWebCamCapturedImage.imageProperty().bind(imageProperty);}private void createCameraControls() {btnCamreaStop = new Button();btnCamreaStop.setOnAction(new EventHandler<ActionEvent>() {@Overridepublic void handle(ActionEvent arg0) {stopWebCamCamera();}});btnCamreaStop.setText("Stop Camera");btnCamreaStart = new Button();btnCamreaStart.setOnAction(new EventHandler<ActionEvent>() {@Overridepublic void handle(ActionEvent arg0) {startWebCamCamera();}});btnCamreaStart.setText("Start Camera");btnCameraDispose = new Button();btnCameraDispose.setText("Dispose Camera");btnCameraDispose.setOnAction(new EventHandler<ActionEvent>() {@Overridepublic void handle(ActionEvent arg0) {disposeWebCamCamera();}});bottomCameraControlPane.getChildren().add(btnCamreaStart);bottomCameraControlPane.getChildren().add(btnCamreaStop);bottomCameraControlPane.getChildren().add(btnCameraDispose);}protected void disposeWebCamCamera() {stopCamera = true;webCam.close();Webcam.shutdown();btnCamreaStart.setDisable(true);btnCamreaStop.setDisable(true);}protected void startWebCamCamera() {stopCamera = false;startWebCamStream();btnCamreaStop.setDisable(false);btnCamreaStart.setDisable(true);}protected void stopWebCamCamera() {stopCamera = true;btnCamreaStart.setDisable(false);btnCamreaStop.setDisable(true);}public static void main(String[] args) {launch(args);}}




0 0
原创粉丝点击