Java 如何从ImageReader android获取InputStream
我在看这门课: 我想要的是从ImageReader类中获取InputStream,并获取正在渲染到当前曲面中的图像数据。“当前曲面”表示当前显示的android屏幕。 我查看了AOSP代码中的一个示例,但它确实很难理解。Java 如何从ImageReader android获取InputStream,java,android,surfaceview,file-descriptor,fileinputstream,Java,Android,Surfaceview,File Descriptor,Fileinputstream,我在看这门课: 我想要的是从ImageReader类中获取InputStream,并获取正在渲染到当前曲面中的图像数据。“当前曲面”表示当前显示的android屏幕。 我查看了AOSP代码中的一个示例,但它确实很难理解。 如果有人给我提供一个ImageReader类的好例子,那将非常有帮助。听起来你好像在试图使用ImageReader从任意曲面中提取数据。这样不行 ImageReader是一个缓冲队列“CPU消费者”,这是一种奇特的说法,表示当您将数据发送到其表面时,CPU上运行的代码可以直接检
如果有人给我提供一个ImageReader类的好例子,那将非常有帮助。听起来你好像在试图使用
ImageReader
从任意曲面中提取数据。这样不行
ImageReader
是一个缓冲队列“CPU消费者”,这是一种奇特的说法,表示当您将数据发送到其表面时,CPU上运行的代码可以直接检查数据。并非所有曲面都可以这样处理——使用标志在创建曲面时设置——因此您需要使用ImageReader#getSurface()
创建曲面
,然后将其传递给希望向曲面
发送数据的对象
如文档所述,“几个Android媒体API类接受曲面对象作为渲染目标,包括MediaPlayer、MediaCodec和RenderScript分配。”
ImageReader
的主要客户是您链接到的CTS测试中演示的摄像头。由于输出格式与摄像头不同(其中一些是专有的),因此它还不能真正与MediaCodec
解码器配合使用
虚拟显示测试更接近您想要的,因为您可以将虚拟显示的输出定向到曲面
。对于具有正常权限的应用程序,您只能将自己的应用程序输出发送到该应用程序。Android 4.4“screenrecord”命令也做了类似的事情
(如果你想记录你在表面视图
上绘制的内容,并且你正在使用OpenGL进行渲染,有一些替代方案可以演示和演示。)听起来好像你在试图使用图像阅读器
从任意表面
中提取数据。这样不行
ImageReader
是一个缓冲队列“CPU消费者”,这是一种奇特的说法,表示当您将数据发送到其表面时,CPU上运行的代码可以直接检查数据。并非所有曲面都可以这样处理——使用标志在创建曲面时设置——因此您需要使用ImageReader#getSurface()
创建曲面
,然后将其传递给希望向曲面
发送数据的对象
如文档所述,“几个Android媒体API类接受曲面对象作为渲染目标,包括MediaPlayer、MediaCodec和RenderScript分配。”
ImageReader
的主要客户是您链接到的CTS测试中演示的摄像头。由于输出格式与摄像头不同(其中一些是专有的),因此它还不能真正与MediaCodec
解码器配合使用
虚拟显示测试更接近您想要的,因为您可以将虚拟显示的输出定向到曲面
。对于具有正常权限的应用程序,您只能将自己的应用程序输出发送到该应用程序。Android 4.4“screenrecord”命令也做了类似的事情
(如果您想在SurfaceView
上记录您正在绘制的内容,并且您正在使用OpenGL进行渲染,那么有一些替代方案可以演示和演示。)看看这个线程,文档中说使用acquireLatestImage()
获取图像的方法。@mohammedmomn感谢您的回复,但我需要使用android.media。ImageReader@DevZer0但我不知道如何设置表面。我想要当前屏幕上显示的图像。你能显示一些你正在做的代码吗?你有要使用的ImageReader的实例吗?看看这个线程文档上说的使用acquireLatestImage()
获取图像的方法。@mohammedmomn感谢您的回复,但我需要使用android.media。ImageReader@DevZer0但我不知道如何设置表面。我想要当前屏幕上显示的图像。你能显示一些你正在做的代码吗?你有你想要使用的ImageReader的实例吗?