توضّح هذه الصفحة كيفية التقاط صور عالية الجودة باستخدام 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()أخطاء التقاط الصور.
- تعالج عملية معاودة الاتصال
خيارات إضافية
راجِع دليل الضبط للتحسين وتثبيت ذاكرة ROM وتنسيق الملفات لمعرفة طرق إضافية يمكنك من خلالها ضبط ImageCapture.
موارد أخرى
لمزيد من المعلومات حول CameraX، يُرجى الاطّلاع على المَراجع التالية:
درس تطبيقي حول الترميز
عيّنة تعليمات برمجية