Saltar al contenido
CrossFly es 100% open sourceSíguenos en GitHub
CrossFlyCrossFly
Empezar

Esta página fue traducida automáticamente del portugués y puede contener errores. La versión en portugués es la canónica.

Cámara y código de barras

Capturar una foto — Camera.shot()

Camera cam = new Camera();
cam.cameraType = Camera.CameraType.PICKER;      // ⚠️ sin default — siempre defínelo
cam.captureMode = Camera.Preview.PHOTO;

new Thread(() -> {
   String caminho = cam.shot();                 // ruta del archivo, o null si se canceló
   if (caminho == null) return;
   Component.onUI(() -> {
      try { imageView.image(new Image(caminho)); Component.repaint(); }
      catch (Exception e) { Debug.log("erro: " + e); }
   });
}).start();

⚠️ click() ya no existe — el método de captura es shot() (retorna un String con la ruta o null si el usuario cancela).

Configuración

Campo Valores
cameraType DEFAULT (cámara interna) · PICKER (PhotoPicker) · GALLERY (galería) — sin default
captureMode Preview.PHOTO · MUTED_VIDEO · AUDIO_VIDEO
videoQuality AVQuality.HIGH/MEDIUM/LOW
resolutionWidth/Height (estáticos) resolución (siempre en LANDSCAPE)

Leer código de barras — CameraBarcode.readBarcode(Image)

Lee 1D y 2D (QR) de una imagen ya capturada (vía ZXing):

Image img = new Image(caminho);
com.google.zxing.Result r = CameraBarcode.readBarcode(img);   // null si no encontró código
if (r != null) {
   String codigo = r.getText();
   Debug.log("Código: " + codigo);
}

Limitaciones reales

  • Camera.shot() abre UI nativa — llámalo fuera del paint thread y vuelve con onUI(...).
  • CameraBarcode.readBarcode NO es thread-safe — no lo llames desde varios hilos a la vez.
  • Los retornos null son normales (canceló / no encontró código) — comprueba siempre.
  • En Mac ARM la captura puede retornar null (limitación de plataforma).

Buenas prácticas

  • Siempre define cameraType (no hay default).
  • Trata el retorno null de shot() y de readBarcode(...).
  • Para solo elegir de la galería, usa el PhotoPicker.

Errores comunes

  • Llamar a click() (no existe) en vez de shot().
  • No definir cameraType.
  • Llamar a readBarcode de forma concurrente (no es thread-safe).

Véase también

¿Te resultó útil esta página?