- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在看这个类(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 进行渲染,可以使用 here 和 here 演示一些替代方案。)
关于java - 如何从ImageReader android获取InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21647770/
我是一名优秀的程序员,十分优秀!