gpt4 book ai didi

java - 如何从ImageReader android获取InputStream

转载 作者:行者123 更新时间:2023-12-01 08:05:56 24 4
gpt4 key购买 nike

我正在看这个类(class):https://developer.android.com/reference/android/media/ImageReader.html

我想要的是从 ImageReader 类获取 InputStream 并获取正在渲染到当前表面的图像数据。当前 Surface 是指当前显示的 Android 屏幕。我查看了 AOSP 代码中的示例,但它确实很难理解。如果有人为我提供 ImageReader 类的一个很好的示例,那将会非常有帮助。

最佳答案

听起来您正在尝试使用 ImageReader 从任意 Surface 中提取数据。但事实并非如此。

ImageReader 是一个缓冲区队列“CPU 消费者”,这是一种奇特的说法,当您将数据发送到其 Surface 时,在 CPU 上运行的代码可以检查直接数据。并非所有表面都可以这种方式处理 - 创建表面时设置使用标志 - 因此您需要使用 ImageReader#getSurface() 创建 Surface 并然后将其传递给想要将数据发送到 Surface 的对象。

正如文档所述,“多个 Android 媒体 API 类接受 Surface 对象作为渲染目标,包括 MediaPlayer、MediaCodec 和 RenderScript 分配。”

ImageReader 的主要客户是相机,在您链接的 CTS 测试中进行了演示。它实际上还不能与 MediaCodec 解码器一起使用,因为输出格式与相机不同(其中一些是专有的)。

虚拟显示器测试更接近您想要的,因为您可以将虚拟显示器的输出定向到Surface。对于具有普通权限的应用程序,您只能将自己的应用程序的输出发送到那里。 Android 4.4“screenrecord”命令执行类似的操作。

(如果您想记录在 SurfaceView 上绘制的内容,并且使用 OpenGL 进行渲染,可以使用 herehere 演示一些替代方案。)

关于java - 如何从ImageReader android获取InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21647770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com