0

I have this code that take photo and save to external storage, what I want is save to internal storage, please help me... what I should change to save to internal storage...

thank you

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

}
4

1 回答 1

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

于 2017-07-26T12:04:41.987 回答