現在、以下のプログラムでandroidの端末のカメラを起動するプログラムを作成しています。
kotlin
1package com.example.mycameraxapp; 2 3import androidx.appcompat.app.AppCompatActivity 4import android.os.Bundle 5import android.Manifest 6import android.content.pm.PackageManager 7import android.net.Uri 8import android.util.Log 9import android.widget.Toast 10import androidx.core.app.ActivityCompat 11import androidx.core.content.ContextCompat 12import java.util.concurrent.Executors 13import androidx.camera.core.* 14import androidx.camera.lifecycle.ProcessCameraProvider 15import kotlinx.android.synthetic.main.activity_main.* 16import java.io.File 17import java.nio.ByteBuffer 18import java.text.SimpleDateFormat 19import java.util.* 20import java.util.concurrent.ExecutorService 21import androidx.camera.core.CameraControl 22 23typealias LumaListener = (luma: Double) -> Unit 24 25class MainActivity : AppCompatActivity() { 26 private var imageCapture: ImageCapture? = null 27 28 private lateinit var outputDirectory: File 29 private lateinit var cameraExecutor: ExecutorService 30 31 override fun onCreate(savedInstanceState: Bundle?) { 32 super.onCreate(savedInstanceState) 33 setContentView(R.layout.activity_main) 34 35 // Request camera permissions 36 if (allPermissionsGranted()) { 37 startCamera() 38 } else { 39 ActivityCompat.requestPermissions( 40 this, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS) 41 } 42 43 // Set up the listener for take photo button 44 camera_capture_button.setOnClickListener { takePhoto() } 45 46 outputDirectory = getOutputDirectory() 47 48 cameraExecutor = Executors.newSingleThreadExecutor() 49 } 50 51 private fun takePhoto() {} 52 53 private fun startCamera() { 54 val cameraProviderFuture = ProcessCameraProvider.getInstance(this) 55 cameraProviderFuture.addListener(Runnable { 56 // Used to bind the lifecycle of cameras to the lifecycle owner 57 val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get() 58 // Preview 59 val preview = Preview.Builder() 60 .build() 61 .also { 62 it.setSurfaceProvider(viewFinder.surfaceProvider) 63 } 64 // Select back camera as a default 65 val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA 66 try { 67 // Unbind use cases before rebinding 68 cameraProvider.unbindAll() 69 // Bind use cases to camera 70 cameraProvider.bindToLifecycle( 71 this, cameraSelector, preview) 72 } catch(exc: Exception) { 73 Log.e(TAG, "Use case binding failed", exc) 74 } 75 76 // 露光補正値設定 77 var cameraexposure = Camera.CameraControl() 78 cameraexposure.setExposureCompensationIndex(30) 79 80 }, ContextCompat.getMainExecutor(this)) 81 } 82 83 private fun allPermissionsGranted() = REQUIRED_PERMISSIONS.all { 84 ContextCompat.checkSelfPermission( 85 baseContext, it) == PackageManager.PERMISSION_GRANTED 86 } 87 88 private fun getOutputDirectory(): File { 89 val mediaDir = externalMediaDirs.firstOrNull()?.let { 90 File(it, resources.getString(R.string.app_name)).apply { mkdirs() } } 91 return if (mediaDir != null && mediaDir.exists()) 92 mediaDir else filesDir 93 } 94 95 override fun onDestroy() { 96 super.onDestroy() 97 cameraExecutor.shutdown() 98 } 99 100 companion object { 101 private const val TAG = "CameraXBasic" 102 private const val FILENAME_FORMAT = "yyyy-MM-dd-HH-mm-ss-SSS" 103 private const val REQUEST_CODE_PERMISSIONS = 10 104 private val REQUIRED_PERMISSIONS = arrayOf(Manifest.permission.CAMERA) 105 } 106 107 override fun onRequestPermissionsResult( 108 requestCode: Int, permissions: Array<String>, grantResults: 109 IntArray) { 110 super.onRequestPermissionsResult(requestCode, permissions, grantResults) 111 if (requestCode == REQUEST_CODE_PERMISSIONS) { //リクエストコードが正しいか確認 112 if (allPermissionsGranted()) { //カメラへのアクセス権限がある場合はカメラを起動 113 startCamera() 114 } else { //権限がなければトーストを提示して権限がないことを通知 115 Toast.makeText(this, 116 "Permissions not granted by the user.", 117 Toast.LENGTH_SHORT).show() 118 finish() 119 } 120 } 121 } 122}
カメラの起動自体はできたので、次にプレビュー画面の露光補正値を変更しようと思い、公式ドキュメントを元に作成しているのですが、公式に記載された内容をどのように実装したら良いか分からず困っています。
こちらのサイトの「setExposureCompensationIndex」を使用して値を変更しようとしています。
上記のコードでもあるように、setExposureCompensationIndexをメソッドに持つ「CameraControl」インターフェースをインポートしています。
kotlin
1import androidx.camera.core.CameraControl
そして、メソッドを使用するために以下の記述をしているのですが、CameraControlの部分が「Rename Reference」と赤字になってしまいうまくいきません。
kotlin
1// 露光補正値設定 2var cameraexposure = Camera.CameraControl() 3 cameraexposure.setExposureCompensationIndex(30)
公式ドキュメントを見ても詳しい実装の方法が分からず困っています。
あなたの回答
tips
プレビュー