在相机拍摄图像时,可以使用以下代码示例来实现不压缩保存图像的功能:
// 导入必要的包
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Environment;
import android.util.Log;
// 设置相机参数
Camera.Parameters parameters = camera.getParameters();
parameters.setPictureFormat(ImageFormat.JPEG);
parameters.setJpegQuality(100); // 设置JPEG质量为最高
camera.setParameters(parameters);
// 设置保存图像的回调函数
camera.takePicture(new ShutterCallback() {
@Override
public void onShutter() {
// 在快门关闭时执行操作(可留空)
}
}, null, new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// 在图像被捕获后执行操作
File pictureFile = getOutputMediaFile(); // 获取保存图像的文件路径
if (pictureFile == null) {
Log.d(TAG, "Error creating media file, check storage permissions");
return;
}
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
Log.d(TAG, "Picture saved");
} catch (IOException e) {
Log.d(TAG, "Error saving picture: " + e.getMessage());
}
}
});
// 获取保存图像的文件路径
private static File getOutputMediaFile() {
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "CameraApp");
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d(TAG, "Failed to create directory");
return null;
}
}
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"IMG_" + timeStamp + ".jpg");
return mediaFile;
}
以上代码示例设置相机参数为JPEG格式,并将JPEG质量设置为最高(100)。在拍摄图像后,将字节数组保存为图像文件并写入存储设备中。图像文件保存在外部存储的"Pictures/CameraApp"目录下,文件名以"IMG_"开头,后跟时间戳和".jpg"后缀。