Fotoğraf çekme

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:

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.OutputFileOptions simgesi, kaydetme konumunu ve meta verileri yapılandırmanıza olanak tanır.
    • Burada OutputFileOptions.Builder(), kaydetme konumunu belirlemek için File nesnesini kullanır.
  • 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

  • CameraX'i Kullanmaya Başlama
  • Kod örneği

  • CameraX örnek uygulamaları