0

我有这段代码可以拍照并保存到外部存储器,我想要的是保存到内部存储器,请帮助我...我应该更改以保存到内部存储...如何将从相机拍摄的图像保存到内部存储器

谢谢

public class MainActivity extends AppCompatActivity { 

    public static final int CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE = 1777; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button button = (Button) findViewById(R.id.button); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 

       File file = new File(Environment.getExternalStorageDirectory()+File.separator + "image.jpg"); 

       intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); 
       startActivityForResult(intent, CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE); 

      } 
     }); 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    //Check that request code matches ours: 

     if (requestCode == CAPTURE_IMAGE_FULLSIZE_ACTIVITY_REQUEST_CODE) { 
     //Get our saved file into a bitmap object: 

      File file = new File(Environment.getExternalStorageDirectory() + File.separator + "image.jpg"); 
      Bitmap bitmap = decodeSampledBitmapFromFile(file.getAbsolutePath(), 1000, 700); 
     } 
    } 

    public static Bitmap decodeSampledBitmapFromFile(String path, int reqWidth, int reqHeight) { 

     //First decode with inJustDecodeBounds=true to check dimensions 

     final BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inJustDecodeBounds = true; 
     BitmapFactory.decodeFile(path, options); 

     // Calculate inSampleSize, Raw height and width of image 

     final int height = options.outHeight; 
     final int width = options.outWidth; 
     options.inPreferredConfig = Bitmap.Config.RGB_565; 
     int inSampleSize = 1; 

     if (height > reqHeight) { 
      inSampleSize = Math.round((float) height/(float) reqHeight); 
     } 
     int expectedWidth = width/inSampleSize; 

     if (expectedWidth > reqWidth) { 
      //if(Math.round((float)width/(float)reqWidth) > inSampleSize) // If bigger SampSize.. 

      inSampleSize = Math.round((float) width/(float) reqWidth); 
     } 

     options.inSampleSize = inSampleSize; 

     // Decode bitmap with inSampleSize set 

     options.inJustDecodeBounds = false; 

     return BitmapFactory.decodeFile(path, options); 
    } 

} 
+0

https://developer.android.com/training/basics/data-storage/files.html –

+0

欢迎来到Stack Overflow!您可能想要修复代码示例的格式。它没有出来。 –

回答

0

你可以试试这个代码将图像保存到内部存储:

FileOutputStream fos; 
try { 
    fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
    // You can also use .JPG 
    yourBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); 
} 
catch (FileNotFoundException e) { 
    Log.e(TAG, e.getMessage()); 
} 
catch (IOException e) { 
    Log.e(TAG, e.getMessage()); 
} finally { 
    fos.close(); 
} 

您也可以看看这个:https://developer.android.com/guide/topics/data/data-storage.html#filesInternal

编辑

为了节省您的最大尺寸的图像文件的内部存储,你必须改变你的

File file = new File(Environment.getExternalStorageDirectory()+File.separator + "image.jpg"); 

File file = new File(context.getFilesDir(), "image.jpg"); 

getFilesDir()返回内部目录的应用程序。你会在这里找到更多的详细信息:https://developer.android.com/training/basics/data-storage/files.html#WriteInternalStorage

+0

谢谢,但这只保存一个位图,我怎样才能保存全尺寸的图像? – edwn

+0

要访问内部存储,可以使用getFilesDir()而不是Environment.getExternalStorageDirectory()。看我的编辑。 – Preader

相关问题