700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android dng图片 android - 使用Camera2 API拍摄dng图片 - 堆栈内存溢出

android dng图片 android - 使用Camera2 API拍摄dng图片 - 堆栈内存溢出

时间:2021-01-01 11:53:27

相关推荐

android dng图片 android - 使用Camera2 API拍摄dng图片 - 堆栈内存溢出

我正在创建一个应用程序,该应用程序以.dng格式拍摄图片以对其进行处理。 我正在使用camera2 API。 我可以拍照并将其保存到手机中,但格式为.jpg。 但是,当我更改代码以使用.dng扩展名保存它们时,它会编译并在手机上显示预览,但是在拍摄照片时出现错误。 我的代码拍摄并保存图片的部分如下。

val reader = ImageReader.newInstance(1280, 720, ImageFormat.RAW_SENSOR, 1)

val outputSurfaces = ArrayList(2)

outputSurfaces.add(reader.surface)

outputSurfaces.add(Surface(previewTextureView.surfaceTexture))

val captureBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE)

captureBuilder.addTarget(reader.surface)

captureBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO)

val file = File("myPath/myImageName.dng")

var captureResult: CaptureResult? = null

和我的听众:

val readerListener = object : ImageReader.OnImageAvailableListener {

override fun onImageAvailable(reader: ImageReader) {

var image: Image? = null

var output: OutputStream? = null

val dngCreator = DngCreator(cameraManager.getCameraCharacteristics("0"), captureResult)

try {

image = reader.acquireLatestImage()

output = FileOutputStream(file)

dngCreator.writeImage(output, image)

} catch (e: FileNotFoundException) {

e.printStackTrace()

} catch (e: IOException) {

e.printStackTrace()

} finally {

output?.close()

image?.close()

}

}

}

reader.setOnImageAvailableListener(readerListener, backgroundHandler)

val captureListener = object : CameraCaptureSession.CaptureCallback() {

override fun onCaptureCompleted(session: CameraCaptureSession, request: CaptureRequest, result: TotalCaptureResult) {

captureResult = result

super.onCaptureCompleted(session, request, result)

}

}

最后,我使用以下命令捕获了会话:

cameraDevice.createCaptureSession(outputSurfaces, object : CameraCaptureSession.StateCallback() {

override fun onConfigured(session: CameraCaptureSession) {

try {

session.capture(captureBuilder.build(), captureListener, backgroundHandler)

} catch (e: CameraAccessException) {

e.printStackTrace()

}

}

override fun onConfigureFailed(session: CameraCaptureSession) {}

}, backgroundHandler)

将图像另存为jpeg时,我遇到了一个以前没有的警告和一个错误:

W/CameraDevice-JV-0: Stream configuration failed due to: createSurfaceFromGbp:1106: Camera 0: No supported stream configurations with format 0x20 defined, failed to create output stream

E/CameraCaptureSession: Session 1: Failed to create capture session; configuration failed

为了保存dng文件,我进行了以下更改:

我将ImageFormat.JPEG替换为ImageFormat.RAW_SENSOR

我将文件扩展名从.jpg更改为.dng

我没有使用dngCreator.writeImage(output, image) ,而是使用了:

val buffer = image!!.planes[0].buffer

val bytes = ByteArray(buffer.capacity())

buffer.get(bytes)

output.write()

由于没有太多有关此主题的信息,因此我不确定我的实现是否正确。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。