Görüntü yakalama

Görüntü yakalama kullanım alanı, yüksek çözünürlüklü, yüksek kaliteli fotoğraflar çeker ve otomatik beyaz dengesi, otomatik pozlama ve Otomatik odaklama (3A) işlevine ek olarak basit manuel kamera kontrollerine ek olarak. Arayan kişi, çekilen fotoğrafın nasıl kullanılacağına karar vermekten sorumludur. şunları içerir:

ImageCapture, üzerinde çalıştığı iki tür özelleştirilebilir yürütücü vardır. ve IO yürütücüsünü kullanır.

  • Geri çağırma yürütücü, takePicture yöntemlerinin parametresidir. Evet kullanıcı tarafından sağlanan OnImageCapturedCallback() öğesini yürütmek için kullanılır.
  • Arayan kişi, resmi bir dosya konumuna kaydetmeyi seçerse bir yürütücüye sokacağım. IO yürütücüyü ayarlamak için şunu arayın: ImageCapture.Builder.setIoExecutor(Executor). Yürütücü yoksa CameraX varsayılan olarak görebilmeli.

Görüntü çekmeyi kur

Görüntü yakalama özelliği, resim çekmek için temel kontroller sağlar. flaş, sürekli otomatik odaklama, sıfır-shutter gecikmesi ve daha fazlası.

setCaptureMode()

ImageCapture.Builder.setCaptureMode() kullanın fotoğraf çekerken çekim modunu yapılandırmak için:

Yakalama modu varsayılan olarak CAPTURE_MODE_MINIMIZE_LATENCY değerine ayarlanır. Daha fazla bilgi için setCaptureMode() referans belgelerini inceleyin.

Sıfır Deklanşör Gecikmesi

1.2 sürümünden itibaren, Sıfır Deklanşör Gecikmesi (CAPTURE_MODE_ZERO_SHOT_LAG) çekim modu olarak kullanılabilir. Sıfır Deklanşör Gecikmesi etkinken gecikme, varsayılan çekim moduna (CAPTURE_MODE_MINIMIZE_LATENCY) kıyasla önemli ölçüde azalır. Böylece hiçbir zaman çekimi kaçırmazsınız.

Sıfır Deklanşör Gecikmesi, en son üç çekim karesini depolayan bir halka arabellek kullanır. Kullanıcı yakalama düğmesine bastığında CameraX, takePicture() öğesini çağırır ve zil arabelleği, yakalanan kareyi düğmeye basıldığında en yakın zaman damgasıyla alır. Daha sonra CameraX, yakalama oturumunu yeniden işleyerek bu kareden bir görüntü oluşturur ve bu resim, diske JPEG biçiminde kaydedilir.

Ön koşullar

Sıfır Deklanşör Gecikmesi'ni etkinleştirmeden önce cihazınızın aşağıdaki gereksinimleri karşılayıp karşılamadığını belirlemek için isZslSupported() aracını kullanın:

Minimum gereksinimleri karşılamayan cihazlarda CameraX, CAPTURE_MODE_MINIMIZE_LATENCY sürümüne geri döner.

Sıfır Deklanşör Gecikmesi yalnızca Resim yakalama kullanım alanında kullanılabilir. Bu özelliği Video yakalama için etkinleştiremezsiniz kullanın veya Kamera uzantıları kullanın. Son olarak, flash kullanılması daha fazla gecikmeye yol açtığından, Sıfır Deklanşör Gecikmesi, flaş AÇIK veya OTOMATİK modundayken çalışmaz. Flaş modunu ayarlama hakkında daha fazla bilgi için setFlashMode() bölümüne bakın.

Sıfır Deklanşör Gecikmesini Etkinleştir

Sıfır Deklanşör Gecikmesini etkinleştirmek için CAPTURE_MODE_ZERO_SHOT_LAG değerini ImageCapture.Builder.setCaptureMode() cihazına geçirin. Başarısız olursa setCaptureMode(), CAPTURE_MODE_MINIMIZE_LATENCY değerine geri döner.

setFlashMode()

Varsayılan flaş modu FLASH_MODE_OFF şeklindedir. Flaş modunu ayarlamak için ImageCapture.Builder.setFlashMode() düğmesini kullanın:

Fotoğraf çek

Aşağıdaki kod örneğinde, uygulamanızı fotoğraf çekmek için nasıl yapılandıracağınız gösterilmektedir:

Kotlin

val imageCapture = ImageCapture.Builder()
    .setTargetRotation(view.display.rotation)
    .build()

cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture,
    imageAnalysis, preview)

Java

ImageCapture imageCapture =
    new ImageCapture.Builder()
        .setTargetRotation(view.getDisplay().getRotation())
        .build();

cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, imageAnalysis, preview);

bindToLifecycle() işlevinin Camera nesnesi döndürdüğünü unutmayın. Yakınlaştırma ve pozlama gibi kamera çıkışını kontrol etmeyle ilgili daha fazla bilgi için bu kılavuza bakın.

Kamerayı yapılandırdıktan sonra aşağıdaki kod kullanıcı işlemi:

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.
            }
       }
    );
}

Görüntü yakalama yöntemi JPEG biçimindedir. Örnek kod için Media.Image dönüştürüldüğünü gösteren YUV_420_888 biçiminden RGB nesne Bitmap nesnesi için bkz. YuvToRgbConverter.kt

Ek kaynaklar

CameraX hakkında daha fazla bilgi edinmek için aşağıdaki ek kaynaklara bakın.

Kod Laboratuvarı

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

  • CameraX örnek uygulamaları