首页 > 代码库 > JavaFX使用摄像头API的示例
JavaFX使用摄像头API的示例
在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; } @Override public 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; @Override public 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() { @Override public 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>() { @Override public 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>() { @Override protected 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>() { @Override protected Void call() throws Exception { while (!stopCamera) { try { if ((grabbedImage = webCam.getImage()) != null) { Platform.runLater(new Runnable() { @Override public 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>() { @Override public void handle(ActionEvent arg0) { stopWebCamCamera(); } }); btnCamreaStop.setText("Stop Camera"); btnCamreaStart = new Button(); btnCamreaStart.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent arg0) { startWebCamCamera(); } }); btnCamreaStart.setText("Start Camera"); btnCameraDispose = new Button(); btnCameraDispose.setText("Dispose Camera"); btnCameraDispose.setOnAction(new EventHandler<ActionEvent>() { @Override public 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); } }
JavaFX使用摄像头API的示例
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。