6

我目前正在开发我的最后一年项目,该项目正在构建一个 Android 相机应用程序。

我对相机接口感到困惑PictureCallbackShutterCallbackPreviewCallback

我知道当我使用Camera.takePicture(),时PictureCallback会被调用。但是ShutterCallbackPreviewCallback呢?我什么时候使用它们?

我已经通过互联网搜索,但我仍然不清楚如何使用它们。谁能为这 3 个回调提供清晰的解释?

4

2 回答 2

7

ShutterCallback用于向用户提供相机正在工作的反馈,例如播放声音、为快门按钮设置动画等。

PreviewCallback为您提供当前相机预览帧的字节数组,因为它被相机传感器捕获。如果您想以某种方式更改框架,请使用此选项,例如在检测到的面部上显示矩形。

PictureCallback为您提供一个代表捕获图片的字节数组。图片的格式(jpg、raw 或 postview)取决于您在takePicture()中传递回调的位置

如需进一步参考,您应该阅读Camera及其相关接口和类的文档。

于 2013-10-25T06:34:45.533 回答
1

我认为谷歌的文件为您的问题提供了足够的解释:

Camera.ShutterCallback
public abstract void onShutter ()

尽可能接近从传感器捕获照片的那一刻调用。这是播放快门声音或提供其他相机操作反馈的好机会。这可能是在触发照片之后的一段时间,但在实际数据可用之前的一段时间。

Camera.PreviewCallback  
public abstract void onPreviewFrame (byte[] data, Camera camera)

调用时显示预览帧。在调用事件线程 open(int) 时调用此回调。

如果使用 YV12 格式,请参考 setPreviewFormat(int) 中的公式,了解预览回调缓冲区中像素数据的排列。

您可以在拍摄照片时使用 ShutterCallback 并使用 PreviewCallBack 从相机捕获帧。请记住 PreviewCallBack 有一些问题。见链接

参考: http:
//developer.android.com/reference/android/hardware/Camera.ShutterCallback.html
http://developer.android.com/reference/android/hardware/Camera.PreviewCallback.html

于 2013-10-25T06:34:35.487 回答