【问题标题】:Android Camera: Get Picture Uri after the photo is takenAndroid相机:拍照后获取图片Uri
【发布时间】:2015-11-27 10:42:50
【问题描述】:

用户在 Android 中使用 SurfaceView 拍照后,我需要获取图像的文件路径 Uri。我需要这个,以便我可以在另一个视图中显示图像。

这是我当前的代码:

captureImage.setOnClickListener(new OnClickListener() {
         @Override
            public void onClick(View v) {
                mCamera.takePicture(null, null, jpegCallback);
         }
});

        mSurfaceView.getHolder().addCallback(this);
        mSurfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

        mCamera = Camera.open();


        jpegCallback = new PictureCallback() {
            public void onPictureTaken(byte[] data, Camera camera) {

                try {

                    Intent i = new Intent(CameraActivity.this, ImageEditor.class);
                    //i.putExtra("image", I_need_to_send_the_Uri);
                    startActivityForResult(i, 0);

                } catch (Exception e) {
                     e.printStackTrace();
                }
            }
        };

    }


@Override
    public void surfaceCreated(SurfaceHolder holder) {
        try {
            mCamera.setPreviewDisplay(mSurfaceView.getHolder());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        Camera.Parameters params = mCamera.getParameters();
        List<Camera.Size> sizes = params.getSupportedPreviewSizes();
        Camera.Size selected = sizes.get(0);
        params.setPreviewSize(selected.width, selected.height);
        mCamera.setParameters(params);

        mCamera.setDisplayOrientation(90);
        mCamera.startPreview();

    }

如何从中获取图像 Uri?或者您建议在另一个视图中打开图像的其他方法是什么?我尝试发送 byte[] 数组和位图,但它太重而无法在视图之间传输,这是不好的做法。如果可以,请帮忙:)

【问题讨论】:

    标签: java android android-layout android-camera


    【解决方案1】:

    首先,您需要将数据保存到文件中并将其存储到设备存储中。

    PictureCallback mPicture = new PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            File pictureFile = getOutputMediaFile();
            if (pictureFile == null) {
                return;
            }
            try {
                FileOutputStream fos = new FileOutputStream(pictureFile);
                fos.write(data);
                fos.close();
            } catch (FileNotFoundException e) {
    
            } catch (IOException e) {
            }
        }
    };
    
    private static File getOutputMediaFile() {
        File mediaStorageDir = new File(
                Environment
                        .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
                "MyCameraApp");
        if (!mediaStorageDir.exists()) {
            if (!mediaStorageDir.mkdirs()) {
                Log.d("MyCameraApp", "failed to create directory");
                return null;
            }
        }
        // Create a media file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
                .format(new Date());
        File mediaFile;
        mediaFile = new File(mediaStorageDir.getPath() + File.separator
                + "IMG_" + timeStamp + ".jpg");
    
        return mediaFile;
    }
    

    通过此代码从文件中获取 Uri

    Uri.fromFile(Filename);
    

    【讨论】:

    • 你知道如何将这个 Uri 对象传递给另一个活动吗?
    • 将 Uri 添加到 extras in Intent 请参阅 this 答案
    • 伙伴,当我尝试将 Uri 设置为 imageview 时,没有任何反应。当我记录它时,路径已正确打印,但我似乎无法将其设置为图像视图。我也尝试将其转换为位图。你能帮忙吗?
    • 漂亮的答案!
    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多