我正在 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/