בדף הזה מוסבר איך לצלם תמונות באיכות גבוהה באמצעות CameraX. אפשר לעשות את זה באמצעות המחלקה ImageCapture וה-methods שמשויכים אליה.
מושגים מרכזיים
אלה המושגים העיקריים שמוסברים במסמך הזה:
- שיטת אחסון: אפשר לצלם תמונות ולשמור אותן במאגר זמני בזיכרון או ישירות בקובץ.
- Executors:
ImageCaptureמשתמש ב-executors כדי לטפל בקריאות חוזרות ובפעולות קלט/פלט. אתם יכולים להתאים אישית את מנהלי התהליכים האלה כדי לשפר את הביצועים ולשלוט בהם. - מצבי צילום: אתם יכולים להגדיר את מצב הצילום כך שתתבצע אופטימיזציה של זמן האחזור או של איכות התמונה.
שיטת האחסון
יש שתי דרכים לצלם תמונות באמצעות 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מספק קריאות חוזרות להצלחה ולכישלון.- פונקציית ה-callback
onImageSaved()מטפלת בצילום תמונה מוצלח ומספקת גישה לתוצאות של התמונה שנשמרה. - פונקציית הקריאה החוזרת
onError()מטפלת בשגיאות בצילום התמונה.
- פונקציית ה-callback
אפשרויות נוספות
במאמר הגדרה לאופטימיזציה, ל-Flash ולפורמט קובץ מוסבר על דרכים נוספות להגדרה של ImageCapture.
מקורות מידע נוספים
מידע נוסף על CameraX זמין במקורות המידע הבאים:
Codelab
דוגמת קוד