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:
Dosya: Çekilen resmi 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ç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.
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 birFile
nesnesi 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 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
Kod örneği