我在实现自定义相机视图时遇到了困难。
我想要实现的任务是-在相机预览中,我得到了一个预览图片(在previewcallback函数中)。我缩放它,然后我想在相机视图中绘制图像的缩放版本。
在previewcallback函数中,我以字节数组的形式获取图像像素值。但在canvas.drawImage中,它接受整型数组。谁能给我提个建议,在previewcallback函数中,像素数据是如何组织在字节数组中的?
我试图锁定表面视图,但无济于事。它返回null,所以我不能在那个表面上画任何东西。
有什么建议吗?谢谢。
发布于 2012-10-08 15:28:53
如前所述,NV21是默认的,必须始终提供-这意味着你可以依赖它,如果你想与其他设备兼容,你也应该依赖它。至于锁定表面视图-你用于预览的表面视图是禁止的,因为它已经被相机应用程序锁定(这是本地的,并在自己的进程中运行)-如果你喜欢使用它,你将不得不停止在它上预览,以便相机应用程序释放这个表面(希望如此)
坏消息是你不能用框架布局把另一个表面视图放在第一个表面视图的上面(这是表面视图的限制,它们不能重叠),但好消息是你可以把图像视图放在它上面并在那里绘制你的位图(通过runOnuiThread() )
您可以在我们的javaOCR project中找到如何执行此操作的示例
(查看android演示,请使用git repo,因为它是最新的)
发布于 2012-10-08 15:17:59
预览回调中像素数据的组织方式取决于预览格式的设置。默认情况下,它是NV21,这是最兼容安卓设备的选项。例如,您可以找到有关此格式here的更多详细信息。
但粗略地说,图像数据是YCbCr格式-而不是canvas想要的更常见的RGB颜色编码。你需要
https://stackoverflow.com/questions/12766626
复制相似问题