Android - 如何从内部存储中存储和检索图像

时间:2016-02-11 13:12:06

标签: android image

我想从相机拍摄图像并将其存储起来并从内部存储中查看。

我使用此代码从相机拍摄图像。

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PIC);

我尝试了以下方法将位图保存在内部存储中。

public String saveToInternalSorage(Bitmap bitmapImage, String fileName){       

        File file = new File(createBasePath(),  fileName + ".png");
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(file);
            bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return file.getName();
    }

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == TAKE_PIC && resultCode == RESULT_OK) {
            Intent i=new Intent(Intent.ACTION_VIEW);
            i.setDataAndType(Uri.fromFile(output), "image/png");
            startActivity(i);
        }
    }

我的路径是/data/user/0/com.dev/app/1454351400000/33352/capture_Image1.png 但在这里,我面临一个问题。位图大小非常小。我想要从相机拍摄的精确图像。

然后我找到了一个解决方案。在意图之前设置路径。所以我试着这样做。

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 output = new File(createBasePath(), "capture_Image1" + ".png"); 
 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(output));
 startActivityForResult(intent, TAKE_PIC);

当我使用此代码时,图像未显示。在onActivityResult resultCode上显示-1。

如果我使用以下代码

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 File dir= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
 output=new File(dir, "CameraContentDemo.png");
 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(output));
 startActivityForResult(intent, TAKE_PIC);

此代码工作正常。拍摄图像后显示图像。

所以请让我知道存储并从原始质量的内部数据库中检索图像。

2 个答案:

答案 0 :(得分:-1)

   Below is code to save the image to internal directory.

    private String saveToInternalStorage(Bitmap bitmapImage){
            ContextWrapper cw = new ContextWrapper(getApplicationContext());
             // path to imageDir
            File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
            // Now Create imageDir
            File mypath=new File(directory,"abc.jpg");

            FileOutputStream foss = null;
            try {           
                foss = new FileOutputStream(mypath);
           // Using compress method on the BitMap object to write image to the OutputStream
                bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, foss);
            } catch (Exception e) {
                  e.printStackTrace();
            } finally {
                  foss.close(); 
            } 
            return directory.getAbsolutePath();
        }


Use below code for Reading a file from internal storage

private void loadImageFromStorage(String path)
{

    try {
        File f=new File(path, "abc.jpg");
        Bitmap b = BitmapFactory.decodeStream(new FileInputStream(f));
            ImageView img=(ImageView)findViewById(R.id.imgPicker);
        img.setImageBitmap(b);
    } 
    catch (FileNotFoundException e) 
    {
        e.printStackTrace();
    }

}

答案 1 :(得分:-1)

void openMultiSelectGallery() {
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri =getOutputMediaFile();
        intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
        /* start activity for result pass intent as argument and request code */
        startActivityForResult(intent, CAMERA_REQUEEST_CODE);

    }
/**
     * This method set the path for the captured image from camera for updating
     * the profile pic
     */
    private Uri getOutputMediaFile() {

        File mediaStorageDir = new File(
                Environment.getExternalStorageDirectory(), "."
                + Constants.CONTAINER);

        // Create the storage directory if it does not exist
        if (!mediaStorageDir.exists()) {
            mediaStorageDir.mkdirs();
        }

        File mediaFile = new File(mediaStorageDir.getPath() + File.separator
                + "IMG_" + System.currentTimeMillis() + ".png");
        Uri uri = null;
        if (mediaFile != null) {
            uri = Uri.fromFile(mediaFile);

        }
        return uri;
    }

     @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);
 if (resultCode == RESULT_OK
                && requestCode == CAMERA_REQUEEST_CODE) {
         String path =fileUri.getPath();
         //decode the path to bitmap here

        } 

        }