यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।
फ़ोटो कैसे लें और फ़ाइल का पथ कैसे प्राप्त करें
उद्देश्य। कैमरा खोलें, एक फ़ोटो लें और रिकॉर्ड की गई JPEG फ़ाइल का पथ प्राप्त करें।
अनुशंसित तरीका है Camera का उपयोग cameraType = CameraType.PICKER के साथ करना, जो अंदर से
PhotoPicker (फ़्रेमवर्क का अपना कैप्चर UI) खोलता है और पथ लौटाता है — या यदि रद्द किया गया तो null।
उपयोग की गई APIs
Camera— बिना तर्क वाला कंस्ट्रक्टर; सार्वजनिक फ़ील्डcameraType(CameraType),captureMode(Preview, डिफ़ॉल्टPHOTO),videoQuality(AVQuality),videoTimeLimit।Camera.shot()→String— फ़ील्ड्स के अनुसार फ़ोटो/वीडियो लेता है और फ़ाइल का पथ याnullलौटाता है (रद्द किया गया, त्रुटि, या macOS ARM)।click()नामक कोई विधि मौजूद नहीं है।CameraType(enum) —DEFAULT(OS का मूल कैमरा),PICKER(PhotoPickerके माध्यम से CrossFly का UI),GALLERY(गैलरी से चुनें)।PhotoPicker(Preview type)—shot()द्वारा आंतरिक रूप से उपयोग किया जाता है जबcameraType == PICKER; यहgetAnswer()(पथ या त्रुटि स्ट्रिंग) औरisError()को उजागर करता है।Camera.shot()पहले से ही आपके लिए त्रुटि कोnullमें बदल देता है।
विचलन/ईमानदारी नोट।
PhotoPickerअमूर्त नहीं है औरonAnswerकॉलबैक का उपयोग नहीं करता: यह परिणाम कोgetAnswer()में रिकॉर्ड करता है और विफलता कोisError()में संकेतित करता है।Camera.shot()इस प्रवाह को इनकैप्सुलेट करता है (show()→getAnswer()पढ़ता है →isError() ? null : ret), इसलिएshot()को प्राथमिकता दें। iOS पर, जबcaptureMode != PHOTOहो,shot()सीधे OS के मूल कैमरे को सौंप देता है।
पूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
package com.exemplo;
import dev.crossfly.ui.*; // Window, Component, Button, Label, UIConstants
import dev.crossfly.ui.layout.*; // VerticalLayout
import dev.crossfly.device.*; // Camera
/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
Label resultado = new Label("");
add(LAY_AUTO, resultado);
Button acao = new Button("Tirar foto");
acao.onAction(c ->
{
// जब तक picker खुला है shot() ब्लॉकिंग है; paint thread के बाहर चलाएँ।
new Thread(() ->
{
Camera cam = new Camera();
cam.cameraType = UIConstants.CameraType.PICKER; // CrossFly की कैप्चर UI
cam.captureMode = UIConstants.Preview.PHOTO; // फ़ोटो (default)
String path = cam.shot(); // JPEG का पाथ, या रद्द/त्रुटि होने पर null
// रिटर्न paint thread के बाहर आता है → onUI(...) के साथ UI पर लौटें
Component.onUI(() ->
resultado.setText(path != null ? "Foto: " + path : "Cancelado ou erro"));
}).start();
});
add(LAY_AUTO, acao);
}
}
नीचे दिया गया अंश केवल मुख्य भाग दिखाता है। चलाने के लिए, इसे ऊपर दिए गए
MainWindowढांचे में रखें।
न्यूनतम अंश
// स्रोत में सत्यापित: Camera.java shot() (पंक्तियाँ 75-91); PhotoPicker.java (constructor + getAnswer/isError)
import dev.crossfly.device.*; // Camera
import dev.crossfly.ui.*; // Component (onUI), UIConstants.CameraType/Preview
// जब तक picker खुला है shot() ब्लॉकिंग है; paint thread के बाहर चलाएँ।
new Thread(() -> {
Camera cam = new Camera();
cam.cameraType = UIConstants.CameraType.PICKER; // CrossFly की कैप्चर UI
cam.captureMode = UIConstants.Preview.PHOTO; // फ़ोटो (default)
String path = cam.shot(); // JPEG का पाथ, या रद्द/त्रुटि होने पर null
// रिटर्न paint thread के बाहर आता है → onUI(...) के साथ UI पर लौटें
Component.onUI(() -> {
if (path != null)
mostrarFoto(path); // उदा.: Image लोड करें और ImageView में दिखाएँ
// else: उपयोगकर्ता ने रद्द किया या camera त्रुटि हुई
});
}).start();
और गहराई से जानें
- कैमरा गाइड: डिवाइस कैमरा · विजेट: PhotoPicker
- संबंधित रेसिपी: gravar-video.md · ler-codigo-de-barras.md