本頁面說明如何使用 CameraX 拍攝高品質圖片。您可以使用 ImageCapture
類別及其相關聯的方法來執行這項操作。
核心概念
以下是本文討論的主要概念:
- 儲存方法:您可以將圖片擷取到記憶體緩衝區,或直接擷取到檔案。
- 執行器:
ImageCapture
會使用執行器處理回呼和 I/O 作業。您可以自訂這些執行緒,以提升效能和控制能力。 - 拍攝模式:您可以設定拍攝模式,以便針對延遲時間或影像品質進行最佳化。
儲存方式
您可以透過兩種方式使用 ImageCapture
擷取圖片。每個方法都使用 ImageCapture.takePicture()
的超載:
檔案:使用
takePicture(OutputFileOptions, Executor, OnImageSavedCallback)
,將擷取的圖片直接儲存到磁碟上的檔案。- 這是拍照最常見的方式。
記憶體內:使用
takePicture(Executor, OnImageCapturedCallback)
接收擷取影像的記憶體內緩衝區。- 這項功能可用於即時圖像處理或分析。
執行器
呼叫 takePicture
時,您會傳遞 Executor
和 OnImageCapturedCallback
或 OnImageSavedCallback
函式。Executor
會執行回呼,並處理任何產生的 I/O。
拍攝相片
如要拍照,您必須設定相機,然後呼叫 takePicture
。
設定攝影機
如要設定攝影機,請建立 CameraProvider
。接著,建立 ImageCapture
物件。使用 ImageCapture.Builder()
:
Kotlin
val imageCapture = ImageCapture.Builder()
.setTargetRotation(view.display.rotation)
.build()
cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview)
Java
ImageCapture imageCapture =
new ImageCapture.Builder()
.setTargetRotation(view.getDisplay().getRotation())
.build();
cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview);
拍照
設定相機後,請呼叫 takePicture()
擷取圖片。以下範例說明如何使用 takePicture()
將圖片儲存到磁碟:
Kotlin
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.
}
})
}
Java
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,請參閱下列資源:
程式碼研究室
程式碼範例