android - 真的很困惑 setPreviewCallback 在 Android 中,需要建议

标签 android android-layout android-activity android-camera surfaceview

我正在 Android 上构建一个应用程序,用于从相机获取帧、处理它们,然后在 SurfaceView 上显示帧,以及通过 Canvas 和 drawbitmap 等在 SurfaceView 上绘图。

只是检查一下,SurfaceView 和 Bitmaps 以及 Canvases 是最好的方法吗?我追求速度。

假设上面的答案是肯定的,那么问题就是:我应该把下面的函数放在哪里

camera_object.setPreviewCallback(new PreviewCallback()
     public void onPreviewFrame(byte[] data, Camera camera){

我应该将它放在 onCreate() 中还是应该放在 surfaceCreated() 或 surfaceChanged() 中?

我声明了我的 mainactivity 类如下:

public class MainActivity extends Activity implements SurfaceHolder.Callback, Camera.PreviewCallback
{

在那个类中,Eclipse 强制我在 MainActivity 类中为 onpreviewframe 创建一个覆盖函数,如下所示

public void onPreviewFrame(byte[] data, Camera camera){
}

但它永远不会被调用。我应该尝试使用这个功能吗?使用它更好吗?或者它只是一个 Eclipse 的东西?

请指教

最佳答案

你在打电话吗 setPreviewDisplay() , startPreview()setPreviewCallback(this)从应用程序?否则,您将不会收到任何对 onPreviewFrame() 的调用。事实上,如果您使用的是 SurfaceView,那么回调预览缓冲区就是屏幕上显示的实际缓冲区的副本。所以如果你想显示这些复制的缓冲区,你需要创建一个新的 View 并覆盖它。这将是低效的。我建议你使用 SurfaceTexture而是使用“onFrameAvailable”回调来获取帧,然后手动绘制和显示。这方面的一个例子可以在 PanoramaActivity 中找到。默认 Android 相机应用程序的代码。

关于android - 真的很困惑 setPreviewCallback 在 Android 中,需要建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11544877/

相关文章:

java - android studio 中无法实例化一个或多个类错误,因此设计未显示

android - 无法在 Android 水平 ListView 中随图像滚动

android - 从 Android TabHost 中的选项卡 Activity 更新选项卡

android - 更新到 Android studio 3.5 后出现以下错误 - FAILURE : Build failed with an exception

Android 模拟器 - TrafficStats.getUidTxBytes(uid)

java - Android:创建一个覆盖一半屏幕并自行更新的 ListView

android - 如何为 Activity 的半透明背景添加圆角?

android - 如何在android中将输入类型数字更改为EditText的文本

java - 如何根据微调器的选择将纯 TextView 添加到当前布局?

android - 我的应用程序的每个 Activity 都单独显示为一个应用程序