Fotoğraf çekme

Bu sayfada, CameraX ile yüksek kaliteli resimlerin nasıl çekileceği açıklanmaktadır. Bunu ImageCapture sınıfı ve ilişkili yöntemleriyle yaparsınız.

Temel kavramlar

Bu dokümanda ele alınan temel kavramlar şunlardır:

  • Depolama yöntemi: Resimleri, bellekteki bir arabelleğe veya doğrudan bir dosyaya kaydedebilirsiniz.
  • Yürütücüler: ImageCapture, geri çağırma ve G/Ç işlemlerini işlemek için yürütücüler kullanır. Daha iyi performans ve kontrol için bu yürütücüleri özelleştirebilirsiniz.
  • Kamera modları: Kamera modunu, gecikmeyi veya görüntü kalitesini optimize edecek şekilde yapılandırabilirsiniz.

Depolama yöntemi

ImageCapture ile resim çekmenin iki yolu vardır. Her biri ImageCapture.takePicture() aşırı yüklemesini kullanıyor:

Vasiyet tenfiz memurları

takePicture işlevini çağırdığınızda bir Executor ve OnImageCapturedCallback veya OnImageSavedCallback işlevi iletirsiniz. Executor, geri çağırma işlevini çalıştırır ve ortaya çıkan tüm G/Ç işlemlerini yönetir.

Fotoğraf çek

Fotoğraf çekmek için kamerayı ayarladıktan sonra takePicture numaralı telefonu arayın.

Kamerayı kurma

Kamerayı ayarlamak için bir 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 resim çekmek için takePicture() tuşuna basın. Bu örnekte, bir resmi diske kaydetmek için takePicture() işlevinin 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, kayıt konumunu ve meta verileri yapılandırmanıza olanak tanır.
    • Burada OutputFileOptions.Builder(), kayıt konumunu belirlemek için bir File nesnesi 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 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'yi yapılandırabileceğiniz diğer yöntemler için Optimizasyon, flaş 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ı