یک تصویر ثبت کنید

در این صفحه نحوه ثبت تصاویر با کیفیت بالا با CameraX توضیح داده شده است. این کار را با کلاس ImageCapture و متدهای مرتبط با آن انجام می دهید.

مفاهیم کلیدی

مفاهیم اولیه مورد بحث در این سند به شرح زیر است:

  • روش ذخیره سازی : می توانید تصاویر را در یک بافر درون حافظه یا مستقیماً در یک فایل ضبط کنید.
  • مجریان : ImageCapture از مجریان برای رسیدگی به تماس ها و عملیات I/O استفاده می کند. برای عملکرد و کنترل بهتر می توانید این مجری ها را سفارشی کنید.
  • حالت‌های ضبط : می‌توانید حالت عکس‌برداری را برای بهینه‌سازی زمان تأخیر یا کیفیت تصویر پیکربندی کنید.

روش ذخیره سازی

دو راه برای گرفتن تصاویر با ImageCapture وجود دارد. آنها هر کدام از اضافه بار ImageCapture.takePicture() استفاده می کنند:

  • فایل: از takePicture(OutputFileOptions, Executor, OnImageSavedCallback) استفاده کنید تا تصویر گرفته شده را مستقیماً در یک فایل روی دیسک ذخیره کنید.

    • این رایج ترین راه برای گرفتن عکس است.
  • In-Memory: از takePicture(Executor, OnImageCapturedCallback) برای دریافت بافر درون حافظه تصویر گرفته شده استفاده کنید.

    • این برای پردازش یا تجزیه و تحلیل تصویر در زمان واقعی مفید است.

مجریان

هنگامی که با takePicture تماس می گیرید، یک Executor و یک تابع OnImageCapturedCallback یا OnImageSavedCallback را ارسال می کنید. Executor پاسخ تماس را اجرا می کند و هر IO حاصل را مدیریت می کند.

عکس بگیرید

برای گرفتن عکس، دوربین را تنظیم کرده و سپس takePicture صدا می زنید.

دوربین را تنظیم کنید

برای تنظیم دوربین، یک CameraProvider ایجاد کنید. سپس یک شی ImageCapture ایجاد کنید. از ImageCapture.Builder() استفاده کنید:

کاتلین

val imageCapture = ImageCapture.Builder()
    .setTargetRotation(view.display.rotation)
    .build()

cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview)

جاوا

ImageCapture imageCapture =
    new ImageCapture.Builder()
        .setTargetRotation(view.getDisplay().getRotation())
        .build();

cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview);

عکس بگیر

پس از پیکربندی دوربین، برای گرفتن تصویر takePicture() فراخوانی کنید. این مثال نحوه استفاده از takePicture() را برای ذخیره یک تصویر در دیسک نشان می دهد:

کاتلین

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.
            }
        })
}

جاوا

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، به منابع زیر مراجعه کنید:

Codelab

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

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