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