真的与Android中的setPreviewCallback混淆,需要建议

Dv_*_*_MH 4 android surfaceview android-layout android-camera android-activity

我正在Android上构建一个应用程序,从相机中取出帧,处理它们,然后在surfaceView上显示帧,以及通过画布和drawbitmap等绘制SurfaceView.

只是要检查一下,SurfaceView和Bitmaps以及Canvases是最好的方法吗?我速度快了.

假设上面的答案是肯定的,问题是:我应该在哪里放置以下功能

camera_object.setPreviewCallback(new PreviewCallback()
     public void onPreviewFrame(byte[] data, Camera camera){
Run Code Online (Sandbox Code Playgroud)

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

我将mainactivity类声明如下:

public class MainActivity extends Activity implements SurfaceHolder.Callback, Camera.PreviewCallback
{
Run Code Online (Sandbox Code Playgroud)

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

public void onPreviewFrame(byte[] data, Camera camera){
}
Run Code Online (Sandbox Code Playgroud)

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

请指教

vik*_*.rk 7

你是从应用程序调用setPreviewDisplay(),startPreview()setPreviewCallback(this)吗?没有它,你将无法调用onPreviewFrame().实际上,如果您使用的是SurfaceView,则回调预览缓冲区是屏幕上显示的实际缓冲区的副本.因此,如果要显示这些复制的缓冲区,则需要创建一个新视图并覆盖它.这将是低效的.我建议您使用SurfaceTexture,并使用'onFrameAvailable'回调来获取帧,然后手动绘制和显示.可以在默认Android Camera App 的PanoramaActivity代码中找到此示例.

  • 但不要确定它适用于所有设备。如果未设置 PreviewDisplay,某些硬件供应商可能不会发送回调。这取决于实施。 (2认同)