民间,
我正在Android上使用MediaProjection API开发屏幕捕获应用程序。
我正在使用ImageReader来实现它,但Image.getPlanes()太重了,无法捕获实时屏幕。
由于Image.getPlanes()阻塞主线程,因此看到平滑渲染屏幕时丢失了太多帧。 当我评论它时,ImageReader会获得比以前更多的图像。
我无法在后台执行Image.getPlanes(),因为在调用Image.close()之后调用了onImageAvailable。
所以,我的问题是:
代码如下。
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){}
}
答案 0 :(得分:0)
好的,我知道模拟器并不擅长此操作。
使用我的真实设备进行的操作很好。
我会尝试找到优化它的选项。
感谢所有帮助。