Pular para o conteúdo
CrossFly é 100% open sourceSiga no GitHub
CrossFlyCrossFly
Começar

Câmera e código de barras

Capturar uma foto — Camera.shot()

Camera cam = new Camera();
cam.cameraType = Camera.CameraType.PICKER;      // ⚠️ sem default — sempre defina
cam.captureMode = Camera.Preview.PHOTO;

new Thread(() -> {
   String caminho = cam.shot();                 // caminho do arquivo, ou null se cancelado
   if (caminho == null) return;
   Component.onUI(() -> {
      try { imageView.image(new Image(caminho)); Component.repaint(); }
      catch (Exception e) { Debug.log("erro: " + e); }
   });
}).start();

⚠️ click() não existe mais — o método de captura é shot() (retorna String com o caminho ou null se o usuário cancelar).

Configuração

Campo Valores
cameraType DEFAULT (câmera interna) · PICKER (PhotoPicker) · GALLERY (galeria) — sem default
captureMode Preview.PHOTO · MUTED_VIDEO · AUDIO_VIDEO
videoQuality AVQuality.HIGH/MEDIUM/LOW
resolutionWidth/Height (estáticos) resolução (sempre em LANDSCAPE)

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

Lê 1D e 2D (QR) de uma imagem já capturada (via ZXing):

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

Limitações reais

  • Camera.shot() abre UI nativa — chame fora da paint thread e volte com onUI(...).
  • CameraBarcode.readBarcode NÃO é thread-safe — não chame de várias threads ao mesmo tempo.
  • Retornos null são normais (cancelou / não achou código) — sempre cheque.
  • Em Mac ARM a captura pode retornar null (limitação de plataforma).

Boas práticas

  • Sempre defina cameraType (não há default).
  • Trate o retorno null de shot() e de readBarcode(...).
  • Para só escolher da galeria, use o PhotoPicker.

Erros comuns

  • Chamar click() (não existe) em vez de shot().
  • Não definir cameraType.
  • Chamar readBarcode concorrentemente (não é thread-safe).

Veja também

Esta página foi útil?