本页面由葡萄牙语机器翻译,可能存在错误。葡萄牙语版本为准。
相机与条形码
拍摄一张照片 —— Camera.shot()
Camera cam = new Camera();
cam.cameraType = Camera.CameraType.PICKER; // ⚠️ 无默认值 — 务必设置
cam.captureMode = Camera.Preview.PHOTO;
new Thread(() -> {
String caminho = cam.shot(); // 文件路径,取消则为 null
if (caminho == null) return;
Component.onUI(() -> {
try { imageView.image(new Image(caminho)); Component.repaint(); }
catch (Exception e) { Debug.log("erro: " + e); }
});
}).start();
⚠️
click()不再存在 —— 捕获方法是shot()(返回带路径的String, 若用户取消则返回null)。
配置
| 字段 | 取值 |
|---|---|
cameraType |
DEFAULT(内部相机) · PICKER(PhotoPicker) · GALLERY(相册) —— 无默认值 |
captureMode |
Preview.PHOTO · MUTED_VIDEO · AUDIO_VIDEO |
videoQuality |
AVQuality.HIGH/MEDIUM/LOW |
resolutionWidth/Height(静态) |
分辨率(始终为 LANDSCAPE 横向) |
读取条形码 —— CameraBarcode.readBarcode(Image)
从已捕获的图像中读取 1D 和 2D(QR)码(通过 ZXing):
Image img = new Image(caminho);
com.google.zxing.Result r = CameraBarcode.readBarcode(img); // 未找到编码则为 null
if (r != null) {
String codigo = r.getText();
Debug.log("Código: " + codigo);
}
实际限制
Camera.shot()会打开原生 UI —— 请在绘制线程之外调用,并用onUI(...)返回。CameraBarcode.readBarcode不是线程安全的 —— 不要同时从多个线程调用。- 返回
null是正常的(取消 / 未找到码)—— 请始终检查。 - 在 Mac ARM 上捕获可能返回
null(平台限制)。
最佳实践
- 始终设置
cameraType(没有默认值)。 - 处理
shot()和readBarcode(...)的null返回。 - 若只想从相册选择,请使用 PhotoPicker。
常见错误
- 调用
click()(不存在)而非shot()。 - 未设置
cameraType。 - 并发调用
readBarcode(非线程安全)。
另见
- PhotoPicker · 图像 · 各平台权限
这个页面有帮助吗?感谢你的反馈!