如何使用 Android 调用系统相机拍照并保存图像59

在 Android 开发中,调用系统相机进行拍照是一个常见任务。通过使用 Android 提供的 Camera2 API 和相关类,开发者可以轻松地让用户使用智能手机的原生相机界面来捕捉图像。本文将提供逐步指南,介绍如何在 Android 应用中实现此功能。

1. 添加必要的权限

在使用 Camera2 API 之前,必须在 文件中为应用添加必要的权限。对于拍照,需要以下权限:

2. 创建 Camera2 管理类

首先,创建一个管理 Camera2 API 交互的类。此类负责打开和关闭摄像头、创建 CaptureRequest、启动会话以及处理图像捕获回调。

public class Camera2Helper { private CameraManager cameraManager; private CameraDevice cameraDevice; private CameraCaptureSession captureSession; private captureRequestBuilder; // 省略其他代码...}

3. 打开摄像头

要打开摄像头,请使用 CameraManager 打开一个 CameraDevice 对象。选择要打开的后置摄像头,并为其创建一个 回调,以在相机状态更改时接收通知。

public void openCamera() { cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); String[] cameraIdList = (); String cameraId = null; for (String id : cameraIdList) { CameraCharacteristics characteristics = (id); if ((CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_BACK) { cameraId = id; break; } } if (cameraId != null) { (cameraId, new () { // 省略回调代码... }, null); }}

4. 创建 CaptureRequest

CaptureRequest 定义了相机如何捕捉图像的设置。要创建 CaptureRequest,请使用 captureRequestBuilder 类的 createCaptureRequest 方法。指定要使用的静态设置,例如输出图像尺寸、图像格式和自动对焦模式。

public void createCaptureRequest() { captureRequestBuilder = (CameraDevice.TEMPLATE_STILL_CAPTURE); (()); (CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE); (CaptureRequest.JPEG_ORIENTATION, getWindowManager().getDefaultDisplay().getRotation());}

5. 创建 ImageReader

ImageReader 是一个缓冲区,用于接收从摄像头捕获的图像。创建一个 ImageReader 对象,指定图像格式和要捕获的图像的最佳大小。

public void createImageReader() { imageReader = (imageWidth, imageHeight, , 2); (new () { // 省略回调代码... }, null);}

6. 创建 CaptureSession

CaptureSession 是一种与相机进行通信并控制其操作的会话。创建 CaptureSession,将 captureRequestBuilder 和 imageReader 作为输入和输出。

public void createCaptureSession() { captureSession = ((()), new () { // 省略回调代码... }, null);}

7. 拍摄图像

要拍摄图像,只需使用 captureSession 调用 capture 方法。这将触发图像捕获并将其发送到 imageReader 缓冲区。

public void takePicture() { ((), null, null);}

8. 处理捕获的图像

当图像变为可用时,会调用 onImageAvailable 回调。您可以访问图像数据并将其保存到文件中或进行进一步处理。

public void onImageAvailable(ImageReader reader) { Image image = (); ByteBuffer buffer = ()[0].getBuffer(); byte[] bytes = new byte[()]; (bytes); saveImage(bytes);}

9. 保存图像

要保存图像,可以将其字节数组写入文件。创建输出文件并使用 FileOutputStream 写入字节数组。

public void saveImage(byte[] bytes) { File imageFile = new File((), ""); FileOutputStream outputStream = new FileOutputStream(imageFile); (bytes); ();}

10. 关闭摄像头

在完成拍照后,请务必关闭摄像头和相关资源,以释放系统资源。

public void closeCamera() { if (captureSession != null) { (); } if (cameraDevice != null) { (); }}

2024-10-18


上一篇:华为鸿蒙:深度研发的创新操作系统

下一篇:Android手机安装Windows操作系统