JavaFX webcam

DĂ©pendances Maven JavaFX et Webcam sarxos

<dependencies>
   <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-controls</artifactId>
      <version>19</version>
   </dependency>
   <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-swing -->
   <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-swing</artifactId>
      <version>19</version>
   </dependency>
   <!-- https://mvnrepository.com/artifact/com.github.sarxos/webcam-capture -->
   <dependency>
      <groupId>com.github.sarxos</groupId>
      <artifactId>webcam-capture</artifactId>
      <version>0.3.12</version>
   </dependency>
</dependencies>

Webcam panel avec JavaFX Swing

import com.github.sarxos.webcam.Webcam;
import com.github.sarxos.webcam.WebcamPanel;
import com.github.sarxos.webcam.WebcamResolution;

import javafx.application.Application;
import javafx.embed.swing.SwingNode;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class AppWebcamPanel extends Application {

  public static void main(String[] args) {
    launch();
  }

  @Override
  public void start(Stage stage) {

    // La webcam par défaut
    var webcam = Webcam.getDefault();
    // La taille originale de la webcam
    webcam.setViewSize(WebcamResolution.VGA.getSize());

    // Le panneau contenant la webcam
    var panel = new WebcamPanel(webcam);

    panel.setImageSizeDisplayed(true);

    // Le noeud swing pour afficher un élément swing dans un noeud JavaFX
    var swingNode = new SwingNode();
    swingNode.setContent(panel);

    var scene = new Scene(new StackPane(swingNode), 640, 480);
    stage.setScene(scene);

    // Ferme l'application quand la fenêtre est fermée
    stage.setOnCloseRequest((event) -> {
      System.exit(0);
    });

    stage.show();
  }

}

Webcam JavaFX Image View

import java.io.IOException;

import com.github.sarxos.webcam.Webcam;
import com.github.sarxos.webcam.WebcamResolution;

import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class AppWebcamImageView extends Application {

  public static void main(String[] args) {
    launch();
  }

  @Override
  public void start(Stage stage) throws IOException {

    // La webcam par défaut
    var webcam = Webcam.getDefault();
    // La taille originale de la webcam
    webcam.setViewSize(WebcamResolution.VGA.getSize());

    // L'afficheur d'image
    var imageView = new ImageView();
    // L'élément racine
    var root = new StackPane(imageView);

    // Ouvre la webcam
    webcam.open();

    var task = new Task < Void > () {

      @Override
      protected Void call() throws Exception {
        boolean camStart = true;
        while (camStart) {
          // Conversion de l'image en image JavaFX
          var image = SwingFXUtils.toFXImage(webcam.getImage(), null);
          // Affichage de l'image
          imageView.setImage(image);
        }
        return null;
      }
    };

    // Tâche pour afficher l'image
    var thread = new Thread(task);
    thread.setDaemon(true); // Le thread est arrêté si l'application est quittée
    thread.start();

    var scene = new Scene(root, 640, 480);
    stage.setScene(scene);
    stage.show();
  }

}

Commentaires