gpt4 book ai didi

java - 如何在 Android 应用程序内有效地重新启动拍照后的预览?

转载 作者:行者123 更新时间:2023-12-01 12:51:03 24 4
gpt4 key购买 nike

我正在尝试编写一个以专用间隔(例如延时摄影)拍摄照片的工具,但在第一次拍摄后很难让相机重置,以便它可以开始拍摄下一张照片。

以下是所使用的代码示例:

// gets called with the oncreate method and loads a preview fine
public void startUpPreview(){
mCamera = getCameraInstance();
mPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
}

// gets called from a later loop
public void getPicture() {
mCamera.takePicture(null, null, mPicture);
releaseCamera();
startUpPreview();
}

使用上面的代码,它会抛出错误:

java.lang.RuntimeException:release()后调用的方法

我使用直接从 SDK 指南获取的发布代码,否则可以正常工作:

private void releaseCamera(){
if (mCamera != null){
mCamera.release();
mCamera = null;
}
}

对于单张图片,通过 sleep 线程添加延迟使其起作用:

try {
Thread.sleep(1000);
releaseCamera();
startUpPreview();
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}

但是当尝试拍摄多张照片时,此代码无法在循环内工作。我假设循环在所有照片拍摄 catch 之前就完成了。

预先感谢任何人可以提供的任何帮助。

最佳答案

takePicture() 启动捕获过程,并以(异步)调用 onPictureTaken() 回调结束。在结束之前你不应该释放相机。

因此,执行循环的伪代码如下所示:

onCLick() { // <-- start the loop
count = 0;
takePicture()
}

onPictureTaken() {
savePicture(count);
count++;
if (count < maxCount) {
mCamera.startPreview();
mHandler.postDelayed(runTakePicture(), 1000);
}
else {
releaseCamera();
}
}

runTakePicture() {
return new Runnable() {
public void run() {
mCamera.takePicture();
}
}
}

关于java - 如何在 Android 应用程序内有效地重新启动拍照后的预览?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24214362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com