Android Camera2 API 显示处理后的预览图像

2023-11-23

新的 Camera 2 API 与旧的有很大不同。向管道的用户部分显示操纵的相机帧让我感到困惑。我知道有很好的解释使用 Android L 和 Camera2 API 处理相机预览图像数据但显示帧仍然不清楚。我的问题是,在经过一些处理后,在屏幕上显示来自 ImageReaders 回调函数的帧,同时保持 Camera2 api 管道的效率和速度的方式是什么?

流程示例:

camera.add_target(imagereader.getsurface) -> 在 imagereaders 回调上进行一些处理 -> (在屏幕上显示处理后的图像?)

解决方法想法:每次处理新帧时将位图发送到 imageview。


澄清问题后进行编辑;原答案在底部

取决于您在哪里进行处理。

如果您使用 RenderScript,则可以将 Surface 从 SurfaceView 或 TextureView 连接到分配(使用设置曲面),然后将处理后的输出写入该 Allocation 并使用 Allocation.ioSend() 将其发送出去。这HDR 取景器演示使用这种方法。

如果您正在进行基于 EGL 着色器的处理,则可以使用以下命令将 Surface 连接到 EGLSurfaceegl创建窗口表面,将 Surface 作为 native_window 参数。然后,您可以将最终输出渲染到 EGLSurface,并且当您调用 eglSwapBuffers 时,缓冲区将被发送到屏幕。

如果您正在进行本机处理,则可以使用 NDKANativeWindow 方法写入从 Java 传递的 Surface 和convert到 ANativeWindow。

如果您正在进行 Java 级别的处理,那么速度非常慢,而且您可能不希望这样做。但可以使用新的Android M图像编辑器类,或者每帧将纹理上传到 EGL。

或者正如您所说,每帧绘制到 ImageView,但这会很慢。


原答案:

如果您正在捕获 JPEG 图像,您可以简单地从以下位置复制 ByteBuffer 的内容:Image.getPlanes()[0].getBuffer() into a byte[],然后使用BitmapFactory.decodeByteArray将其转换为位图。

如果您要捕获 YUV_420_888 图像,那么您需要编写自己的转换代码,从 3 平面 YCbCr 4:2:0 格式转换为您可以显示的格式,例如用于创建位图的 RGB 值的 int[] ;不幸的是,目前还没有一个方便的 API 来实现这一点。

如果您正在捕获 RAW_SENSOR 图像(拜耳模式未处理的传感器数据),那么您需要进行大量图像处理或仅保存 DNG。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Camera2 API 显示处理后的预览图像 的相关文章

  • (colorPrimaryDark) 状态栏颜色在 android v21 上不起作用?

    我在 style xml 上添加了 colorPrimaryDark 但状态栏 android v21 上的颜色没有受到影响 我有一个自定义工具栏 我在 style xml 代码中不使用操作栏主题 如果有任何解决方案请帮助我吗 样式代码
  • 是否可以以编程方式更改操作栏选项卡指示器

    如何以编程方式更改操作栏的选定选项卡指示器 我读过关于选项卡样式 http developer android com guide topics ui actionbar html Style和 Tab setCustomView 方法 但
  • Nexus One / Android“CPU 可能被固定”错误

    我正在使用 NDK 修订版 4 和 OpenGL ES 2 0 为 Nexus One 编写一款图形密集型游戏 我们真的在这里推动硬件 并且在大多数情况下它运行良好 除了偶尔我会因以下日志消息而严重崩溃 W SharedBufferStac
  • 序列化 ArrayList

    我正在尝试编写一个 Android 游戏 即使用户想要返回主菜单或者活动被系统终止 我也希望能够暂停游戏 onSaveInstanceState 似乎并没有给我很大的控制权来决定何时可以读回捆绑包 而且据我所知 捆绑包仅在短时间内有效 所以
  • Android NDK:断言失败:TARGET_PLATFORM 未定义

    使用 NDK r5b 时 当我使用以下命令在 jni 目录中进行构建时 NDK DIR ndk build 效果很好 但是当我切换到 r6b 只需以不同的方式设置 NDK DIR 并运行相同的命令时 我得到 usr local androi
  • 如何在无头Linux中更新Android平台工具?

    我们有一些没有安装 X Window 的 CI 主机 我知道如何使用 android 更新命令更新 SDK 但如何使用此命令更新平台工具 您可以使用以下命令 android list sdk android update sdk no ui
  • 如何将参数传递给Workmanager DoWork方法

    我想安排任务在 24 小时后从数据库中删除 public class WorkManager extends Worker public WorkManager NonNull Context context NonNull WorkerP
  • Android 上关闭并重新打开应用程序后 GPS 不更新位置

    当我关闭我的应用程序一段时间然后再次重新打开它后 我的应用程序将不会更新位置或 有时更新需要很长时间 大约5分钟 我该如何修复它 这是我的代码 private LocationManager lm private LocationListe
  • 文本末尾有额外的换行符

    使用此方法设置文本后 我似乎得到了一些额外的换行符TextView message setText Html fromHtml message 我怎样才能删除这些 它们导致我的布局扭曲 因为它在输出中添加了两条额外的行 该字符串已通过以下方
  • Byte[] 和 java.lang.OutOfMemoryError 按位读/写文件

    我正在努力擦除 Android 中的一些可用空间 这是我的代码 private void creatingFileDelete int size int passMode File lastFile new File Environment
  • GoogleMap 本质上是可打包的吗?

    我对java和android很陌生 我遇到了一个基本问题 在这个给定的fragment 我可以添加GoogleMap对象为parcelable没有任何额外的pracelable类为 public class SecondFragment e
  • Android 的@hide 注解到底有什么作用?

    Android中很多内部API都被标记出来了 hide What exactly这是吗 另一个答案 https stackoverflow com questions 17035271 what does hide mean in the
  • 覆盖乔达一周的第一天?

    是否有可能覆盖乔达弱的第一天sunday 因为 Joda 使用Monday作为一周的第一天 如果有办法的话 谁能解释一下 我在 SOF 中提到了以下主题 乔达时间 一周的第一天 https stackoverflow com questio
  • 在 Cordova / PhoneGap 中生成 iOS 和 Android 图标

    我有一个新创建的 Cordova 项目 其中包含以下内容config xml设置 使用来自http docs phonegap com en edge config ref images md html http docs phonegap
  • 如何在没有片段的情况下使用导航抽屉?

    我正在尝试遵循这个tutorial https developer android com training implementing navigation nav drawer html关于如何创建导航抽屉 但我不想在用户从抽屉列表中选择
  • 致命异常:OkHttp 调度程序

    我在 Android 应用程序中使用 OkHttp 库向天气 API 发出 Web 请求 我已经实现了我的代码 但在执行请求时遇到了致命异常 我也已经在我的清单中添加了互联网权限 MainActivity java private Curr
  • 将 Spritekit 游戏转换为 Android?

    是否有任何新选项可以将 spritekit 游戏转换为 Android 游戏 似乎唯一的选择是用 Java 重新编码所有内容或使用 Cocos2D LibGDX 等 很不幸的是 不行 而且带有 Apportable 服务的跨平台 Sprit
  • getApplicationDocumentsDirectory 在 flutter 桌面(Windows)上不起作用

    如何在 Windows 上的 flutter 桌面上保存和打开文件 getApplicationDocumentsDirectory 不适用于 Windows 应用程序的 flutter 桌面 Future
  • 如何从 Google Fit API 获取步数?

    请原谅我的笨蛋 我对 Android 和 Google API 完全陌生 我有以下连接到 GoogleFit 的代码 我还有一个 API 密钥和 Oauth 我在哪里 如何使用 API 密钥和 Oauth 关于如何获取它们的指南有很多 但关
  • 更改 ActionMode 溢出图标

    有没有办法更改 ActionMode Overflow 图标而不更改 正常 ActionBar 的图标 我仍然需要弄清楚如何仅更改 ActionMode Actionbar 内部的溢出图标 因为我更改了默认操作栏中的溢出图标 该图标在 Ac

随机推荐