如何保存从相机意图中获取的图像以用作配置文件图像?

时间:2015-07-23 15:16:58

标签: android android-intent

在我的应用中,用户可以从相机拍摄图像并用作个人资料照片。一切正常,除了当用户离开应用程序并返回时,图像不再存在。那么,即使用户退出应用程序,如何保存该图像以保持在那里?

相机意图代码:

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
            startActivityForResult(cameraIntent, CAMERA_REQUEST); 

onActivityResult

protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    if (requestCode == CAMERA_REQUEST) {  
        Bitmap photo = (Bitmap) data.getExtras().get("data"); 
        getLayoutInflater().inflate(R.layout.custon_header,null);
        ImageView profimg = (ImageView) findViewById(R.id.roundedimg);
        profimg.setImageBitmap(photo);

有人可以帮我解决这个问题吗?

由于

3 个答案:

答案 0 :(得分:0)

您需要将该图像保存在SD卡或手机记忆库中,以便在再次打开应用程序时可以访问该图像。您在拍摄图像后立即看到该图像,因为它存在于内存中,一旦您离开应用程序,内存就会被释放。

private void SaveBitmapInDirectory(Bitmap bitmap, String fileName) 
{
   File direct = new File(Environment.getExternalStorageDirectory() + "/dirName");

   if (!direct.exists()) 
   {
       File profilePic = new File("/sdcard/dirName/");
       profilePic.mkdirs();
   }

   File file = new File(new File("/sdcard/dirName/"), fileName);
   if (file.exists()) 
   {
      file.delete();
   }

   try 
   {
        FileOutputStream out = new FileOutputStream(file);
       bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
       out.flush();
       out.close();
   } 
   catch (Exception e) 
   {
      e.printStackTrace();
   }
}

通过调用以下函数从onCreate函数中的目录加载文件:

void loadProfilerImage(String fileName)
{
    File file = new File(new File("/sdcard/dirName/"), fileName);
    if (file.exists()) 
    {
        Bitmap myBitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
        ImageView.setImageBitmap(myBitmap);
    }
}

答案 1 :(得分:0)

您可以使用EXTRA_OUTPUT配置存储图像的意图:

 Intent imageIntent = new Intent(
            MediaStore.ACTION_IMAGE_CAPTURE);
    File imageFolder = new File(Environment
            .getExternalStorageDirectory(), "YourFolderName");
     if (!imagesFolder.exists()) {
        imagesFolder.mkdirs();
    }
    File imageFile = new File(imagesFolder, "user.jpg");
    Uri uriSavedImage = Uri.fromFile(image);
    imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
    imageIntent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION,
            ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    activity.startActivityForResult(imageIntent, CAMERA_REQUEST);

所以你有了路径,可以将文件解码为位图。

答案 2 :(得分:0)

data.getExtras().get("data"); 

仅返回低质量图像的缩略图。您必须在相机上指定保存图像的位置:

File outputFile = new File(Environment.getExternalStorageDirectory() +"/myOutput.jpg");

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    cameraIntent.putExtra(Intent.EXTRA_OUTPUT,outputFile.getAbsolutePath());

startActivityForResult(cameraIntent, CAMERA_REQUEST);

在您的activityResult上,只需使用您的位图的输出文件:

bitmap = BitmapFactory.decodeFile(outputFile.getAbsolutePath());