ضبط کردن تصویر

این صفحه نحوه گرفتن تصاویر با کیفیت بالا با 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، به منابع زیر مراجعه کنید:

Codelab

  • شروع به کار کردن با CameraX
  • نمونه کد

  • برنامه‌های نمونه CameraX