首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义相机视图

自定义相机视图
EN

Stack Overflow用户
提问于 2012-10-07 14:25:21
回答 2查看 388关注 0票数 0

我在实现自定义相机视图时遇到了困难。

我想要实现的任务是-在相机预览中,我得到了一个预览图片(在previewcallback函数中)。我缩放它,然后我想在相机视图中绘制图像的缩放版本。

在previewcallback函数中,我以字节数组的形式获取图像像素值。但在canvas.drawImage中,它接受整型数组。谁能给我提个建议,在previewcallback函数中,像素数据是如何组织在字节数组中的?

我试图锁定表面视图,但无济于事。它返回null,所以我不能在那个表面上画任何东西。

有什么建议吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-08 15:28:53

如前所述,NV21是默认的,必须始终提供-这意味着你可以依赖它,如果你想与其他设备兼容,你也应该依赖它。至于锁定表面视图-你用于预览的表面视图是禁止的,因为它已经被相机应用程序锁定(这是本地的,并在自己的进程中运行)-如果你喜欢使用它,你将不得不停止在它上预览,以便相机应用程序释放这个表面(希望如此)

坏消息是你不能用框架布局把另一个表面视图放在第一个表面视图的上面(这是表面视图的限制,它们不能重叠),但好消息是你可以把图像视图放在它上面并在那里绘制你的位图(通过runOnuiThread() )

您可以在我们的javaOCR project中找到如何执行此操作的示例

(查看android演示,请使用git repo,因为它是最新的)

票数 1
EN

Stack Overflow用户

发布于 2012-10-08 15:17:59

预览回调中像素数据的组织方式取决于预览格式的设置。默认情况下,它是NV21,这是最兼容安卓设备的选项。例如,您可以找到有关此格式here的更多详细信息。

但粗略地说,图像数据是YCbCr格式-而不是canvas想要的更常见的RGB颜色编码。你需要

  1. 将YCbCr字节值转换为RGB值(公式可以在Wikipedia)
  2. Upsample中找到),将Cb和Cr (颜色)通道转换为全分辨率;它们已减少到Y(亮度)通道的宽度和高度的1/2。最简单的选择是使用最近邻上采样-对4个不同的Y值使用相同的Cb和Cr值。因此,您可以将Cb和Cr通道的像素(0,0)与Y通道的像素(0,0)、(1,0)、(0,1)和(1,1)配对,以形成全分辨率图像。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12766626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档