توضّح هذه الصفحة كيفية التقاط صور عالية الجودة باستخدام 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، يُرجى الاطّلاع على المراجع التالية:
الدرس التطبيقي حول الترميز
نموذج رمز