无法使用Android中的自定义相机将捕获的图像保存在文件夹中

问题描述 投票:0回答:1

我有一个带有[[自定义相机的简单应用,但是当我拍照时,我无法在模拟器的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(); } } } } } }

java android image android-camera
1个回答
0
投票
您的代码执行了正确的操作,因此将图像文件保存到设备,但是将其保存到此处返回的路径的结果中:

mFile = getActivity().getExternalFilesDir(null);

外部文件目录可能指向myapp / data / data,这是为您的应用程序写入外部存储的文件保留的“沙盒”数据区域。这与“下载”文件夹不同,后者将文件保存到电话上的共享(在沙箱外部)数据区域中。

[如果要保存到下载,则可能必须将图像写入外部网站,然后将https://路径传递到ViewIntent,该ViewIntent将在浏览器会话中显示图像,并提供以下选项:从那里下载图像。

© www.soinside.com 2019 - 2024. All rights reserved.