android camera 如何实现拍照后不停止预览功能

移动开发 码拜 5年前 (2015-04-25) 415次浏览 0个评论

根据android api 中 camera.takePicture
This method is only valid when preview is active (after startPreview()). Preview will be stopped after the image is taken; callers must call startPreview() again if they want to re-start preview or take more pictures. This should not be called between start() and stop().
After calling this method, you must not call startPreview() or take another picture until the JPEG callback has returned.
发现要拍照需要调用的takePicture方法会停掉一下预览,我们现在自己的工程机器上发现,有一些低配置机上,调用这个方法后底层回调 Camera.PictureCallback要几秒钟时间,然后又只能在这个回调里重启预览startPreview(),导致画面有一个明显卡顿在拍照页面的效果。
现在我就想拍照不调用 camera.takePicture()可不可以实现?类似于有些连拍相机APP的效果(在网上下了一个连拍APP在我们工程机上可以实现,求其思路)!

android camera 如何实现拍照后不停止预览功能
10分
拍照模式,肯定要停顿下,这个时间可以自己控制。
如果你是要实现抓拍,连拍的话,给你个思路吧,用摄像模式来截图,这样就可以抓拍,连拍不停顿了。
android camera 如何实现拍照后不停止预览功能
引用 1 楼 u012137924 的回复:

拍照模式,肯定要停顿下,这个时间可以自己控制。
如果你是要实现抓拍,连拍的话,给你个思路吧,用摄像模式来截图,这样就可以抓拍,连拍不停顿了。

这个时间可以自己控制?那我把它设置为最小可不可以。请问是那个方法,我没有看到设置的方法

android camera 如何实现拍照后不停止预览功能
引用 1 楼 u012137924 的回复:

拍照模式,肯定要停顿下,这个时间可以自己控制。
如果你是要实现抓拍,连拍的话,给你个思路吧,用摄像模式来截图,这样就可以抓拍,连拍不停顿了。

时间可以自己控制,那我将时间设置为1s以内应该可以达到效果,请问这个方法在那?我看API没有看到呀

android camera 如何实现拍照后不停止预览功能
10分
你的APP里面有没有类似如下的变量
mJpegPictureCallbackTime
mJpegCallbackFinishTime等。
加几个LOG你就能看到,照相模式不管你设置为多少,哪怕设置为零,也回停顿,因为要处理图片数据,也就是说,你把那些个东西设置为零是指个人感官上会几乎没有停顿的感觉,可是多次点击拍照按钮的时候会听见依然有停顿的声音。
要抓拍的话,还是得走摄像模式截图的办法。目前,个人是这样认为的。
android camera 如何实现拍照后不停止预览功能
引用 4 楼 u012137924 的回复:

你的APP里面有没有类似如下的变量
mJpegPictureCallbackTime
mJpegCallbackFinishTime等。
加几个LOG你就能看到,照相模式不管你设置为多少,哪怕设置为零,也回停顿,因为要处理图片数据,也就是说,你把那些个东西设置为零是指个人感官上会几乎没有停顿的感觉,可是多次点击拍照按钮的时候会听见依然有停顿的声音。
要抓拍的话,还是得走摄像模式截图的办法。目前,个人是这样认为的。

mJpegPictureCallbackTime和mJpegCallbackFinishTime 应该不是设置时间,这两个参数,我看代码就是简单的获取接口回执时间,与结束时间,用于打印输出。

android camera 如何实现拍照后不停止预览功能
10分
我说的是类似,以前做的忘记了。

public long mShutterLag;
public long mShutterToPictureDisplayedTime;
public long mPictureDisplayedToJpegCallbackTime;
private long mRawPictureCallbackTime;
private long mJpegPictureCallbackTime;

看看  long mShutterLag 这个是快门延迟,其他的你自己找找吧,这些个时间全都可以设置为0;

android camera 如何实现拍照后不停止预览功能
20分
连拍要去修改源码哦
android camera 如何实现拍照后不停止预览功能
引用 6 楼 u012137924 的回复:

我说的是类似,以前做的忘记了。

public long mShutterLag;
public long mShutterToPictureDisplayedTime;
public long mPictureDisplayedToJpegCallbackTime;
private long mRawPictureCallbackTime;
private long mJpegPictureCallbackTime;

看看  long mShutterLag 这个是快门延迟,其他的你自己找找吧,这些个时间全都可以设置为0;

不知道你那边的源码是怎么写的,我这边是
mShutterLag = mShutterCallbackTime – mCaptureStartTime;
Log.v(“–ShutterCallback时间:”, “” + System.currentTimeMillis());
然后除了声明就没了 应该只是打印输出。。

android camera 如何实现拍照后不停止预览功能
引用 6 楼 u012137924 的回复:

我说的是类似,以前做的忘记了。

public long mShutterLag;
public long mShutterToPictureDisplayedTime;
public long mPictureDisplayedToJpegCallbackTime;
private long mRawPictureCallbackTime;
private long mJpegPictureCallbackTime;

看看  long mShutterLag 这个是快门延迟,其他的你自己找找吧,这些个时间全都可以设置为0;

就这个方法?

android camera 如何实现拍照后不停止预览功能
20分
你把每个时间打个Log出来,自己看下,根据时长,自己就可以判断是那个时间,还有你的源码是不是从CSDN上下载的?那么多个Time你自己打印log随便看,他们都是以毫秒为单位的,我说过,你可以把这些个Time全部注释,然后在声明的地方赋0;这个不是根本的解决办法,你不要老想着往这个方向去突破,用MediaPlayer做录制视频功能然后在截图,这样可以达到连续抓拍不停顿,当然其中还有很多要处理的地方。慢慢研究吧。
android camera 如何实现拍照后不停止预览功能
10分
不知道源码里面有没有支持,找一下有没有zsl mode。这个可以实现你说的

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明android camera 如何实现拍照后不停止预览功能
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!