我有一个带有[[自定义相机的简单应用,但是当我拍照时,我无法在模拟器的Downloads文件夹中保存捕获的图像,而是创建了空白文件夹,我不知道为什么我的代码中的错误在哪里?我搜索了答案,但没有找到有用的答案。
您能帮忙吗?图像读取器
final ImageReader reader = ImageReader.newInstance(width, height, ImageFormat.JPEG, 1);
List<Surface> outputSurface = new ArrayList<>();
outputSurface.add(reader.getSurface());
outputSurface.add(new Surface(textureView.getSurfaceTexture()));
final CaptureRequest.Builder builder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);
builder.addTarget(reader.getSurface());
builder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);
int rotation = getActivity().getWindowManager().getDefaultDisplay().getRotation();
builder.set(CaptureRequest.JPEG_ORIENTATION, ORIENTATIONS.get(rotation));
final ImageReader.OnImageAvailableListener readerListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader imageReader) {
Image mCapturedImage;
mCapturedImage = imageReader.acquireLatestImage();
mFile = getActivity().getExternalFilesDir(null);
ImageSaver saver = new ImageSaver(mCapturedImage,getActivity().getExternalFilesDir(null));
mBackgroundHandler.post(saver);
}
};
reader.setOnImageAvailableListener(readerListener, mBackgroundHandler);
final CameraCaptureSession.CaptureCallback captureCallback = new CameraCaptureSession.CaptureCallback() {
@Override
public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) {
super.onCaptureCompleted(session, request, result);
showSnackBar("Image saved", Snackbar.LENGTH_LONG);
createCameraPreview();
}
};
ImageSaver类
private static class ImageSaver implements Runnable { private final File mFile; private Image mImage; ImageSaver(Image image, File file) { mImage = image; mFile = file; } @Override public void run() { if (mImage != null) { ByteBuffer buffer = mImage.getPlanes()[0].getBuffer(); byte[] bytes = new byte[buffer.remaining()]; buffer.get(bytes); FileOutputStream output = null; try { SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); String format = s.format(new Date()); String fileName = format+".jpg"; File file = new File(mFile, "image_" + fileName); output = new FileOutputStream(file); output.write(bytes); } catch (IOException e) { e.printStackTrace(); } finally { if (null != output) { try { output.close(); } catch (IOException e) { e.printStackTrace(); } } } } } }
mFile = getActivity().getExternalFilesDir(null);
外部文件目录可能指向myapp / data / data,这是为您的应用程序写入外部存储的文件保留的“沙盒”数据区域。这与“下载”文件夹不同,后者将文件保存到电话上的共享(在沙箱外部)数据区域中。[如果要保存到下载,则可能必须将图像写入外部网站,然后将https://路径传递到ViewIntent,该ViewIntent将在浏览器会话中显示图像,并提供以下选项:从那里下载图像。