# कैमरा और बारकोड

> Camera.shot() से फ़ोटो/वीडियो कैप्चर करें और CameraBarcode.readBarcode से कोड पढ़ें।

Source: https://crossfly.dev/hi/docs/data-and-services/device-camera — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# कैमरा और बारकोड

## एक फ़ोटो कैप्चर करना — `Camera.shot()`
```java
Camera cam = new Camera();
cam.cameraType = Camera.CameraType.PICKER;      // ⚠️ कोई default नहीं — हमेशा परिभाषित करें
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` (गैलरी) — **कोई default नहीं** |
| `captureMode` | `Preview.PHOTO` · `MUTED_VIDEO` · `AUDIO_VIDEO` |
| `videoQuality` | `AVQuality.HIGH/MEDIUM/LOW` |
| `resolutionWidth`/`Height` (स्टैटिक) | रिज़ॉल्यूशन (हमेशा LANDSCAPE में) |

## बारकोड पढ़ना — `CameraBarcode.readBarcode(Image)`
पहले से कैप्चर की गई **इमेज** से 1D और 2D (QR) पढ़ता है (ZXing के ज़रिए):
```java
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` परिभाषित करें (कोई default नहीं है)।
- `shot()` और `readBarcode(...)` के `null` रिटर्न को संभालें।
- सिर्फ़ गैलरी से चुनने के लिए, [PhotoPicker](/docs/ui/widgets/photopicker) उपयोग करें।

## आम गलतियाँ
- `shot()` के बजाय `click()` कॉल करना (मौजूद नहीं है)।
- `cameraType` परिभाषित न करना।
- `readBarcode` को समवर्ती रूप से कॉल करना (थ्रेड-सेफ़ नहीं है)।

## यह भी देखें
- [PhotoPicker](/docs/ui/widgets/photopicker) · [इमेजेस](/docs/ui/images-and-graphics/images) · [प्लेटफ़ॉर्म अनुसार अनुमतियाँ](/docs/platforms)
