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()(retornaStringcom o caminho ounullse 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 comonUI(...).CameraBarcode.readBarcodeNÃO é thread-safe — não chame de várias threads ao mesmo tempo.- Retornos
nullsã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
nulldeshot()e dereadBarcode(...). - Para só escolher da galeria, use o PhotoPicker.
Erros comuns
- Chamar
click()(não existe) em vez deshot(). - Não definir
cameraType. - Chamar
readBarcodeconcorrentemente (não é thread-safe).
Veja também
Esta página foi útil?Obrigado pelo feedback!