使用Camera类(4)

既然已经建立了活动及预览Surface,现在我们准备好开始使用实际的Camera对象。

当创建Surface时,由于SurfaceHolder.Callback的存在,它将在代码中的触发调用surfaceCreated方法。此时可以通过调用Camera类上的静态方法open获得Camera对象。

Camera camera;

public void surfaceCreated(SurfaceHolder holder) { 

camera = Camera.open();

随后,我们想要将预览显示设置为正在使用的SurfaceHolder,它通过回调提供给我们的方法。需要将该方法包装在try...catch块中,因为它可能会抛出IOException。如果发生了这种情况,那么我们会希望释放该Camera对象;否则,它将绑定摄像头的硬件资源,使其不能用于其他应用程序。

try 

{

camera.setPreviewDisplay(holder);

}

catch (IOException exception) 

camera.release();

}

最后,启动摄像头预览。

camera.startPreview();

}

相应地,在surfaceDestroyed中也需要释放该Camera对象。我们将首先调用stopPreview,以确保应该释放的资源都被清理。

public void surfaceDestroyed(SurfaceHolder holder) {

camera.stopPreview();

camera.release();

}

运行这段代码,您可能会发现预览有些奇怪。它会逆时针旋转预览图像90°,如图2-1所示。

读书导航