如何解决Android Camera2 API 对比度/伽玛不适用于视频预览
我受到这个 topic 的启发,在我的相机应用中实现了亮度和对比度,但是当我使用伽玛/对比度时,它根本不起作用。
我在 Android Camera2 API 中使用 createCaptureRequest(CameraDevice.TEMPLATE_RECORD)
模式。
问题是下面的代码对视频预览没有影响:
captureRequestBuilder.set(CaptureRequest.TONEMAP_MODE,CaptureRequest.TONEMAP_MODE_GAMMA_VALUE)
captureRequestBuilder.set(CaptureRequest.TONEMAP_GAMMA,level)
captureSession.setRepeatingRequest(
captureRequestBuilder.build(),null,null)
无论我设置什么 level
值,它都无济于事。
对比度的另一个问题:
private val channels by lazy {
val tc = captureRequestBuilder.get(CaptureRequest.TONEMAP_CURVE) ?: return@lazy null
val channels = arrayOf(floatArrayOf(),floatArrayOf(),floatArrayOf())
for(channel in TonemapCurve.CHANNEL_RED .. TonemapCurve.CHANNEL_BLUE) {
val contrast = FloatArray(tc.getPointCount(channel) * 2)
tc.copyColorCurve(channel,contrast,0)
channels[channel] = contrast
}
channels
}
fun setContrast(level: Float) {
val level = level.coerceIn(0f,1f)
val channels = channels ?: return
val newContrast = arrayOf(floatArrayOf(),floatArrayOf())
for(channel in TonemapCurve.CHANNEL_RED .. TonemapCurve.CHANNEL_BLUE) {
val contrast = FloatArray(channels[channel].size)
System.arraycopy(channels[channel],contrast.size)
contrast.forEachIndexed { index,_ ->
contrast[index] *= level
}
newContrast[channel] = contrast
}
val newValue = TonemapCurve(newContrast[TonemapCurve.CHANNEL_RED],newContrast[TonemapCurve.CHANNEL_GREEN],newContrast[TonemapCurve.CHANNEL_BLUE])
captureRequestBuilder.set(CaptureRequest.TONEMAP_MODE,CaptureRequest.TONEMAP_MODE_CONTRAST_CURVE)
captureRequestBuilder.set(CaptureRequest.TONEMAP_CURVE,newValue)
captureSession.setRepeatingRequest(
captureRequestBuilder.build(),null)
}
captureRequestBuilder.get(CaptureRequest.TONEMAP_CURVE)
总是返回 null,即使尝试手动设置 captureRequestBuilder.set(CaptureRequest.TONEMAP_CURVE,newValue)
视频预览仍然没有任何变化。
有什么解决方案可以使用 CameraDevice.TEMPLATE_RECORD
在 Android 相机视频预览中正确实现对比度和伽玛?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。