2016-02-11 2 views
0

Я хочу взять изображение с камеры и сохранить его и просмотреть его из внутреннего хранилища.Android - Как сохранить и получить изображение из внутреннего хранилища

Я использую этот код для съемки с камеры.

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); 

Когда я использую этот код, изображение не отображается. на onActivityResultresultCode, показывающий -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); 

Этот код работает отлично. После того, как изображение будет показано.

Поэтому, пожалуйста, дайте мне знать и сохраните изображение из внутреннего db с оригинальным качеством.

+1

Если вы планируете хранить в SQLite, иметь в виду, что курсор вы получаете имеет предел 1 Мбайт, так что если вы храните байт, вероятно, вы не получите изображение. Сохраните путь вместо этого и получите изображение с пути. – Fustigador

ответ

-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(); 
    } 

} 
+0

Я уже использую этот код только. Изображение - это потеря оригинального качества, если я использую этот код. Это проблема для меня. Мне нужен точный образ. –

-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 

     } 

     } 
+0

Я хочу сохранить его во внутреннем хранилище. Не во внешнем хранилище. –

Смежные вопросы