android camra拍照实现保存jpeg
时间: 2024-10-28 16:07:05 浏览: 5
在Android中,使用Camera API进行照片拍摄并保存为JPEG格式,需要经过以下几个步骤:
1. **设置权限**:确保你的应用请求了`.Manifest`文件中的`CAMERA`和`WRITE_EXTERNAL_STORAGE`权限。
```xml
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
2. **初始化相机**:创建`CameraManager`对象,获取设备摄像头列表,并选择一个可用的相机打开。
```java
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
String cameraId = cameraManager.getCameraIdList()[0];
cameraManager.openCamera(cameraId, ..., new CameraCallback());
```
3. **创建SurfaceView**:为了接收从相机传来的图片数据,你需要创建一个`SurfaceView`来显示预览画面。
4. **开始预览**:设置相机预览到SurfaceView上,并监听`PictureCallback`以捕获拍照事件。
```java
final CameraCaptureSession session = ...;
session.setRepeatingRequest(CameraDevice.StateCallback.STATE_SET, ...);
session.capture(..., new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, CameraCaptureSession session) {
// 将字节数组转换为Bitmap
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
// 保存为JPEG
File imageFile = saveBitmapAsJPEG(bitmap);
}
});
```
5. **保存Bitmap为JPEG**:创建一个`FileOutputStream`,然后使用`Bitmap.compress()`方法将Bitmap压缩成JPEG格式并写入文件。
```java
public File saveBitmapAsJPEG(Bitmap bitmap) {
File outputDir = getOutputMediaFile();
if (!outputDir.exists()) {
outputDir.mkdirs();
}
String fileName = "image_" + System.currentTimeMillis() + ".jpg";
File outputFile = new File(outputDir, fileName);
try (FileOutputStream fos = new FileOutputStream(outputFile)) {
bitmap.compress(Bitmap.CompressFormat.JPEG, 100 /* quality */, fos);
} catch (IOException e) {
e.printStackTrace();
}
return outputFile;
}
private File getOutputMediaFile() {
// 返回外部存储路径
Environment.getExternalStorageDirectory();
}
```
6. **关闭相机**:完成拍照后别忘了关闭相机资源。
```java
@Override
public void onDisconnected() {
cameraManager.close();
}
```
7. **清理内存**:释放相机相关的所有内存,包括关闭Preview Surface和取消所有的请求。
完成以上步骤后,你应该就能成功地通过Android Camera API拍摄并保存JPEG格式的照片了。
阅读全文