التقاط صورة

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

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

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

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

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

هناك طريقتان لالتقاط الصور باستخدام ImageCapture. يستخدم كلّ منهما عددًا كبيرًا من ImageCapture.takePicture():

  • ملف: استخدِم takePicture(OutputFileOptions, Executor, OnImageSavedCallback) لحفظ الصورة التي تم التقاطها مباشرةً في ملف على القرص.

    • هذه هي الطريقة الأكثر شيوعًا لالتقاط الصور.
  • في الذاكرة: استخدِم takePicture(Executor, OnImageCapturedCallback) لتلقّي مخزن مؤقت في الذاكرة لل الصورة التي تم التقاطها.

    • وهذا مفيد لمعالجة الصور أو تحليلها في الوقت الفعلي.

منفّذو الوصية

عند استدعاء 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() أخطاء التقاط الصور.

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

اطّلِع على دليل الضبط للتحسين والفلاش وتنسيق الملف للاطّلاع على مزيد من الطُرق التي يمكنك من خلالها ضبط ImageCapture.

موارد أخرى

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

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

  • البدء في استخدام CameraX
  • نموذج رمز

  • نماذج تطبيقات CameraX