Bu sayfada, CameraX ile yüksek kaliteli görüntülerin nasıl yakalanacağı 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 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: Çekilen görüntüyü doğrudan diskteki bir dosyaya kaydetmek için
takePicture(OutputFileOptions, Executor, OnImageSavedCallback)simgesini kullanın.- Fotoğraf çekmenin en yaygın yolu budur.
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 yararlıdır.
Yürütücüler
takePicture işlevini çağırdığınızda bir Executor ve OnImageCapturedCallback veya OnImageSavedCallback işlevini geçirirsiniz. 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:
val imageCapture = ImageCapture.Builder() .setTargetRotation(view.display.rotation) .build() cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageCapture, preview)
Resim çek
Kamerayı yapılandırdıktan sonra görüntü yakalamak için takePicture() tuşuna basın.
Bu örnekte, bir resmi diske kaydetmek için takePicture()'ın nasıl kullanılacağı gösterilmektedir:
fun onClick() { val outputFileOptions = ImageCapture.OutputFileOptions.Builder(File("photo.jpg")).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 } } ) }
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ğırmalar sağlar.onImageSaved()geri çağırma işlevi, başarılı görüntü yakalamayı işler ve kaydedilen görüntü sonuçlarına erişim sağlar.onError()geri çağırma işlevi, resim yakalama hatalarını işler.
Ek seçenekler
ImageCapture öğesini yapılandırabileceğiniz diğer yöntemler için Optimizasyon, Flash ve dosya biçimi için yapılandırma kılavuzu'na bakın.
Diğer kaynaklar
CameraX hakkında daha fazla bilgi edinmek için aşağıdaki kaynakları inceleyin:
Codelab
Kod örneği