التقاط صورة

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

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

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

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

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

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

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

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

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

المنفِّذون

عند استدعاء takePicture، عليك تمرير Executor وإما دالة OnImageCapturedCallback أو OnImageSavedCallback. ينفّذ Executor دالة معاودة الاتصال ويتعامل مع أي عمليات إدخال وإخراج ناتجة.

التقاط صورة

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

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

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

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

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

التقاط صورة

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

fun onClick() {
    val outputFileOptions = ImageCapture.OutputFileOptions.Builder(File("photo.jpg")).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
            }
        }
    )
}

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

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

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

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

موارد أخرى

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

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

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

  • تطبيقات نموذجية تستخدم CameraX