프로그래밍/Android
[Android] androidX Camera
chance
2019. 7. 15. 11:45
프리뷰
fun initAndroidXCamera() {
.
.
val previewConfig = PreviewConfig.Builder().apply{
setLensFacing(CameraX.LensFacing.FRONT)
setTargetAspectRatio(Rational(1,1))
setTargetResolution(Size(480,640))
}.build()
val preview = Preview( previewConfig )
preview.setOnPreviewOutputUpdateListener {
Log.d(TAG, "onPreviewOutputUpdate")
val parent = binding.viewFinder.parent as ViewGroup
parent.removeView(binding.viewFinder)
parent.addView(binding.viewFinder, 0)
binding.viewFinder.surfaceTexture = it.surfaceTexture
updateTransform()
}
.
.
}
private fun updateTransform() {
val matrix = Matrix()
val centerX = binding.viewFinder.width / 2f
val centerY = binding.viewFinder.height / 2f
val rotationDegrees = when( binding.viewFinder.display.rotation ) {
Surface.ROTATION_0 -> 0
Surface.ROTATION_90 -> 90
Surface.ROTATION_180 -> 180
Surface.ROTATION_270 -> 270
else -> return
}
matrix.postRotate( -rotationDegrees.toFloat(), centerX, centerY)
binding.viewFinder.setTransform(matrix)
}
스냅샷
fun initAndroidXCamera(){
.
.
val imageCaptureConfig = ImageCaptureConfig.Builder().apply {
setLensFacing(CameraX.LensFacing.FRONT)
setTargetAspectRatio(Rational(1,1))
setTargetResolution(Size(480,640))
setCaptureMode(ImageCapture.CaptureMode.MIN_LATENCY)
}.build()
val imageCapture = ImageCapture( imageCaptureConfig )
imageCapture.takePicture ( object:ImageCapture.OnImageCapturedListener() {
override fun onCaptureSuccess(image: ImageProxy?, rotationDegrees: Int) {
super.onCaptureSuccess(image, rotationDegrees)
}
override fun onError(useCaseError: ImageCapture.UseCaseError?, message: String?, cause: Throwable?) {
super.onError(useCaseError, message, cause)
}
})
.
.
}
Analyzer
fun initAndroidXCamera() {
.
.
// analyzer
val analyzerConfig = ImageAnalysisConfig.Builder().apply {
val thread = HandlerThread("ImageAnalyzer").apply {
start()
}
setCallbackHandler(Handler( thread.looper ))
setLensFacing(CameraX.LensFacing.FRONT)
setTargetAspectRatio(Rational(1,1))
setTargetResolution(Size(480,640))
setImageReaderMode( ImageAnalysis.ImageReaderMode.ACQUIRE_NEXT_IMAGE )
}.build()
val analyzer = ImageAnalysis( analyzerConfig )
analyzer.analyzer = ImageAnalyzer(this)
.
.
}
class ImageAnalyzer(activity:ExternalCaptureActivity) : ImageAnalysis.Analyzer {
private val activity:ExternalCaptureActivity = activity
override fun analyze(imageProxy: ImageProxy?, rotationDegrees: Int) {
Log.d(activity.TAG, "analyze");
val image = imageProxy?.image
if( image != null ) {
// 획득한 image에 대한 처리를 추가
}
}
}