צילום תמונה

בדף הזה מוסבר איך לצלם תמונות באיכות גבוהה באמצעות CameraX. אפשר לעשות את זה באמצעות המחלקה ImageCapture וה-methods שמשויכים אליה.

מושגים מרכזיים

אלה המושגים העיקריים שמוסברים במסמך הזה:

  • שיטת אחסון: אפשר לצלם תמונות ולשמור אותן במאגר זמני בזיכרון או ישירות בקובץ.
  • Executors: ImageCapture משתמש ב-executors כדי לטפל בקריאות חוזרות ובפעולות קלט/פלט. אתם יכולים להתאים אישית את מנהלי התהליכים האלה כדי לשפר את הביצועים ולשלוט בהם.
  • מצבי צילום: אתם יכולים להגדיר את מצב הצילום כך שתתבצע אופטימיזציה של זמן האחזור או של איכות התמונה.

שיטת האחסון

יש שתי דרכים לצלם תמונות באמצעות ImageCapture. כל אחד מהם משתמש בעומס יתר של ImageCapture.takePicture():

מבצעים

כשמתקשרים אל 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() מטפלת בשגיאות בצילום התמונה.

אפשרויות נוספות

במאמר הגדרה לאופטימיזציה, ל-Flash ולפורמט קובץ מוסבר על דרכים נוספות להגדרה של ImageCapture.

מקורות מידע נוספים

מידע נוסף על CameraX זמין במקורות המידע הבאים:

Codelab

  • תחילת העבודה עם CameraX
  • דוגמת קוד

  • אפליקציות לדוגמה של CameraX