我在实施自定义相机视图方面遇到了困难。
我想要达到的任务是 - 在相机预览中,我得到了一张预览图片(在previewcallback功能中)。 我缩放它然后我想在相机视图中绘制图像的缩放版本。
在previewcallback函数中,我将图像像素值作为字节数组。但是在canvas.drawImage中它接受int数组。任何人都可以建议我如何在previewcallback函数中的字节数组中组织像素数据?
我试图锁定表面视图,但它没有帮助。它返回null,因此我无法在该表面上绘制任何内容。
有什么建议吗? 感谢。
答案 0 :(得分:2)
预览回调中像素数据的组织方式取决于预览格式的设置。默认情况下,它是NV21,这是Android设备中最兼容的选项。例如,您可以找到有关此格式here的更多详细信息。
但粗略地说,图像数据是YCbCr格式 - 而不是画布想要的更常见的RGB颜色编码。你需要
答案 1 :(得分:1)
如前所述,NV21是默认设置,必须始终提供 - 这意味着您可以依赖它,如果您想与其他设备兼容,则需要依赖它。至于锁定表面视图 - 您用于预览的表面视图是不受限制的,因为它已被相机应用程序锁定(本机并在自己的过程中运行) - 如果您想使用它,则必须停止预览它所以相机应用程序释放这个表面(希望)
坏消息是你不能在第一个框架布局的顶部放置另一个表面视图
(这是表面视图的限制,它们不能重叠),但好消息是你可以放置图像视图并在那里绘制你的位图(通过runOnuiThread()
)
您可以在我们的javaOCR project
中找到如何执行此操作的示例(请参阅android演示,请使用git repo,因为它是最新的)