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