【发布时间】:2014-12-20 15:41:51
【问题描述】:
我目前正在学习一个github项目ScreenCapture的代码,它可以捕获屏幕并在surfaceview中显示图像,这里是项目https://github.com/Charlesjean/android-ScreenCapture。我尝试使用以下代码将 SurfaceView 的表面替换为 ImageReader 对象的表面:
mImgReader = ImageReader.newInstance(mWidth, mHeight, ImageFormat.JPEG, 5);
mSurface = mImgReader.getSurface();// mSurfaceView.getHolder().getSurface();
mImgReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Log.i(TAG, "in OnImageAvailable");
}
}, mHandler);
并像这样创建 VirtualDisplay:
mVirtualDisplay = mMediaProjection.createVirtualDisplay("ScreenCapture",
mWidth, mHeight, mScreenDensity,
DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY |
DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC,
mSurface, new VirtualDisplay.Callback() {
@Override
public void onResumed() {
Log.i(TAG, "onResumed");
super.onResumed();
}
@Override
public void onPaused() {
Log.i(TAG, "onPaused");
super.onPaused();
}
}, mHandler);
但是onImageAvailable 方法从未被调用过,有没有人有这方面的经验?我不明白为什么这不起作用。
【问题讨论】:
-
你检查过logcat吗?可能是图片格式问题。试试
PixelFormat.RGBA_8888而不是ImageFormat.JPEG。 -
@SimonMarquis 我会尽力给你反馈。
-
@SimonMarquis 成功了,非常感谢。
-
@Charlesjean 您的项目链接无效。我需要一些参考你的项目。可以分享一下吗
标签: android