التقاط صورة

توضّح هذه الصفحة كيفية التقاط صور عالية الجودة باستخدام CameraX. يمكنك إجراء ذلك باستخدام فئة ImageCapture والطرق المرتبطة بها.

المفاهيم الرئيسية

في ما يلي المفاهيم الأساسية التي يتم تناولها في هذا المستند:

  • **طريقة التخزين**: يمكنك التقاط الصور إما في مخزن مؤقت في الذاكرة أو مباشرةً في ملف.
  • المنفّذون: ImageCapture تستخدم المنفّذين لمعالجة عمليات معاودة الاتصال وعمليات الإدخال/الإخراج. يمكنك تخصيص هؤلاء المنفّذين لتحسين الأداء والتحكّم.
  • أوضاع الالتقاط: يمكنك ضبط وضع الالتقاط لتحسين إما وقت الاستجابة أو جودة الصورة.

طريقة التخزين

هناك طريقتان لالتقاط الصور باستخدام ImageCapture. تستخدم كلتا الطريقتَين دالة ImageCapture.takePicture() مع حمولة زائدة:

المنفّذون

عند استدعاء takePicture، يمكنك تمرير Executor وإما دالة OnImageCapturedCallback أو OnImageSavedCallback. يُشغِّل Executor عملية معاودة الاتصال ويتعامل مع أي عمليات إدخال/إخراج ناتجة.

التقاط صورة

لالتقاط صورة، عليك إعداد الكاميرا ثم استدعاء takePicture.

إعداد الكاميرا

لإعداد الكاميرا، أنشئ CameraProvider. بعد ذلك، أنشئ كائن ImageCapture. استخدِم ImageCapture.Builder():

Kotlin

val imageCapture = ImageCapture.Builder()
    .setTargetRotation(view.display.rotation)
    .build()

cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview)

Java

ImageCapture imageCapture =
    new ImageCapture.Builder()
        .setTargetRotation(view.getDisplay().getRotation())
        .build();

cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview);

التقاط صورة

بعد ضبط الكاميرا، استدعِ takePicture() لالتقاط صورة. يوضّح هذا المثال كيفية استخدام takePicture() لحفظ صورة على القرص:

Kotlin

fun onClick() {
    val outputFileOptions = ImageCapture.OutputFileOptions.Builder(File(...)).build()
    imageCapture.takePicture(outputFileOptions, cameraExecutor,
        object : ImageCapture.OnImageSavedCallback {
            override fun onError(error: ImageCaptureException)
            {
                // insert your code here.
            }
            override fun onImageSaved(outputFileResults: ImageCapture.OutputFileResults) {
                // insert your code here.
            }
        })
}

Java

public void onClick() {
    ImageCapture.OutputFileOptions outputFileOptions =
            new ImageCapture.OutputFileOptions.Builder(new File(...)).build();
    imageCapture.takePicture(outputFileOptions, cameraExecutor,
        new ImageCapture.OnImageSavedCallback() {
            @Override
            public void onImageSaved(ImageCapture.OutputFileResults outputFileResults) {
                // insert your code here.
            }
            @Override
            public void onError(ImageCaptureException error) {
                // insert your code here.
            }
       }
    );
}

في ما يلي النقاط الرئيسية حول هذا المقتطف البرمجي:

  • تتيح لك السمة ImageCapture.OutputFileOptions ضبط موقع الحفظ والبيانات الوصفية.
    • هنا، تستخدم الدالة OutputFileOptions.Builder() كائن File لـ تحديد موقع الحفظ.
  • تلتقط الدالة takePicture() الصورة بشكل غير متزامن باستخدام الخيارات والمنفّذ المقدَّمين.
  • توفر الدالة OnImageSavedCallback عمليات معاودة الاتصال للنجاح والفشل.
    • تعالج عملية معاودة الاتصال onImageSaved() عملية التقاط الصورة بنجاح و توفّر إمكانية الوصول إلى نتائج الصورة المحفوظة.
    • تعالج عملية معاودة الاتصال onError() أخطاء التقاط الصور.

خيارات إضافية

راجِع دليل الضبط للتحسين وتثبيت ذاكرة ROM وتنسيق الملفات لمعرفة طرق إضافية يمكنك من خلالها ضبط ImageCapture.

موارد أخرى

لمزيد من المعلومات حول CameraX، يُرجى الاطّلاع على المَراجع التالية:

درس تطبيقي حول الترميز

  • بدء استخدام CameraX
  • عيّنة تعليمات برمجية

  • تطبيقات عيّنات CameraX