如何将从相机拍摄的图像保存到内部存储器中

时间:2017-07-26 02:32:33

标签: android image photos internal-storage android-internal-storage

我有这个代码拍照并保存到外部存储,我想要的是保存到内部存储,请帮助我...我应该更改以保存到内部存储...

谢谢

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

}

1 个答案:

答案 0 :(得分: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