【发布时间】:2013-11-25 15:04:38
【问题描述】:
我需要能够在屏幕上显示来自正在运行的相机实例的两个相同的预览,这可能吗?
到目前为止,我能想到的唯一方法是克隆预览表面视图。所以使用提供给onPreviewFrame的原始视频数据, 我正在为当前帧创建一个新位图,然后将其绘制到表面支架画布上。
这在 ui 线程上运行时显示完美,但显然它在创建位图时每隔几秒钟阻塞一次 UI。我现在已将位图创建移至解决应用程序锁定问题的新线程,但现在我的表面视图闪烁/流泪!
这会奏效吗?还是我走错了路?如何停止闪烁?
减少示例代码;
public void onPreviewFrame(byte[] data, Camera camera) {
-- new thread
// create bitmap from YUV (videoFrame)
-- UI thread
Canvas canvas = null;
try {
canvas = surfaceHolder.lockCanvas();
if (canvas != null) {
canvas.drawBitmap(videoFrame, null, new Rect(0, 0, 200, 200), null);
}
} catch (Exception e) {
mLogger.error(e.getMessage());
} finally {
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
我相信这与surfaceview双缓冲区有关,我有很多解决方案但无法阻止闪烁!
【问题讨论】:
-
你能帮助你如何做到这一点......我卡住了!
标签: java android android-camera surfaceview