Android上的Image.getPlanes()太重



Folks,

我正在Android上开发屏幕捕捉应用程序,使用MediaProjection API。

我正在使用ImageReader来实现它,但Image.getPlanes((太重了,无法捕获实时屏幕。

由于Image.getPlanes((阻塞了主线程,它丢失了太多帧,无法看到平滑渲染的屏幕。当我对它进行评论时,ImageReader获得了比以前更多的图像。

我无法在后台执行Image.getPlanes((,因为在调用Image.close((之后调用了onImageAvailable。

所以,我的问题是:

  • 为什么Image.getPlanes((这么重
  • 有什么方法可以实现流畅的屏幕捕捉吗

代码如下。

public void onImageAvailable(ImageReader reader) {
    try {
        Image img = reader.acquireLatestImage();
        //Too heavy!!
        Image.Plane[] planes = img.getPlanes();
        /* Do something */
        img.close();
    }catch (Exception e){
        setImageReader();
    }
}

谢谢你的帮助!

问题更新

//Background process example
@Override
public void onImageAvailable(ImageReader reader) {
    try {
        final Image img = reader.acquireLatestImage();
        new Thread(new Runnable() {
            @Override
            public void run() {
                Image.Plane[] planes = img.getPlanes();
                /* Do something */
                img.close();
                //onImageAvailable is no called Until here.
                //Because ImageReader is locked from ImageReader.acquireLatestImage() to Image.close()
            }
        }).start();
    }catch(Exception e){}
}

好的,我知道模拟器不擅长这个操作。

我的真实设备运行良好。

我会尝试找到优化它的选项。

谢谢你的帮助。

相关内容

  • 没有找到相关文章

最新更新