Bu sayfada, CameraX ile yüksek kaliteli görüntüler yakalama açıklanmaktadır. Bu işlemi ImageCapture sınıfı ve ilişkili yöntemleriyle yaparsınız.
Temel kavramlar
Bu belgede ele alınan temel kavramlar şunlardır:
- Depolama yöntemi: Görüntüleri bellek içi arabelleğe veya doğrudan bir dosyaya kaydedebilirsiniz.
- Yürütücüler:
ImageCapture, geri çağırma ve G/Ç işlemlerini yönetmek için yürütücüleri kullanır. Daha iyi performans ve kontrol için bu yürütücüleri özelleştirebilirsiniz. - Çekim Modları: Çekim modunu, gecikme süresi veya görüntü kalitesi için optimizasyon yapacak şekilde yapılandırabilirsiniz.
Depolama yöntemi
ImageCapture ile görüntü yakalamanın iki yolu vardır. Her biri ImageCapture.takePicture() aşırı yüklemesini kullanır:
Dosya: Yakalanan görüntüyü doğrudan diskteki bir dosyaya kaydetmek için
takePicture(OutputFileOptions, Executor, OnImageSavedCallback)simgesini kullanın.- Bu, fotoğraf çekmenin en yaygın yoludur.
Bellek İçi: Yakalanan görüntünün bellek içi arabelleğini almak için
takePicture(Executor, OnImageCapturedCallback)kullanın.- Bu, gerçek zamanlı görüntü işleme veya analiz için kullanışlıdır.
Yürütücüler
takePicture işlevini çağırdığınızda bir Executor ve OnImageCapturedCallback veya OnImageSavedCallback işlevini aktarırsınız. Executor geri çağırmayı çalıştırır ve ortaya çıkan G/Ç'yi işler.
Fotoğraf çek
Fotoğraf çekmek için kamerayı kurup takePicture'ı ararsınız.
Kamerayı kurma
Kamerayı kurmak için CameraProvider oluşturun. Ardından bir
ImageCapture nesnesi oluşturun. ImageCapture.Builder() kullanın:
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);
Resim çek
Kamerayı yapılandırdıktan sonra görüntü yakalamak için takePicture() işlevini çağırın.
Bu örnekte, bir resmi diske kaydetmek için takePicture()'ın nasıl kullanılacağı gösterilmektedir:
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.
}
}
);
}
Bu snippet ile ilgili önemli noktalar şunlardır:
ImageCapture.OutputFileOptionssimgesi, kaydetme konumunu ve meta verileri yapılandırmanıza olanak tanır.- Burada
OutputFileOptions.Builder(), kaydetme konumunu belirlemek içinFilenesnesini kullanır.
- Burada
takePicture()işlevi, sağlanan seçenekleri ve yürütücüyü kullanarak görüntüyü eşzamansız olarak yakalar.OnImageSavedCallback, başarı ve başarısızlık için geri çağırma işlevleri sağlar.onImageSaved()geri çağırma işlevi, başarılı resim yakalama işlemini yönetir ve kaydedilen resim sonuçlarına erişim sağlar.onError()geri çağırma işlevi, görüntü yakalama hatalarını işler.
Ek seçenekler
ImageCapture'ı yapılandırabileceğiniz ek yollar için Optimizasyon, Flash ve dosya biçimi için yapılandırma kılavuzuna bakın.
Diğer kaynaklar
CameraX hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara göz atın:
Codelab
Kod örneği