मुख्य सामग्री पर जाएँ
CrossFly 100% ओपन सोर्सGitHub पर फ़ॉलो करें
CrossFlyCrossFly
शुरू करें

यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।

फ़ोटो कैसे लें और फ़ाइल का पथ कैसे प्राप्त करें

उद्देश्य। कैमरा खोलें, एक फ़ोटो लें और रिकॉर्ड की गई 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();

और गहराई से जानें

क्या यह पृष्ठ उपयोगी था?