SlideTabLayout 的片段:存储位图

Fragment of SlideTabLayout: store Bitmap

我正在为我的应用程序使用 API21 SlidingTabLayout 和 SlidingTabStrips。

我正在保存我的意向相机照片的 .tmp 文件。效果很好,我可以在我的 phone 包目录中看到它,但我可以将此 .tmp 文件存储为 .png(我想更改分辨率,因为我需要 <1mb 文件而不是照片中的 3mb 文件 API 意图)

最近两个小时试了很多东西都解决不了

这是我的代码:

开始意图:takeAPicture

private void takeAPicture(View view) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(getView().getContext())));

    startActivityForResult(intent, TAKE_PHOTO_CODE);

}

我的 .tmp 文件的路径:getTempFile

private File getTempFile(Context context){
    final File path = new File(Environment.getExternalStorageDirectory(), getView().getContext().getPackageName());
    if(!path.exists()){
        path.mkdir();
    }
    return new File(path, "test.tmp");
}

至少我处理了 ActivityResult:

public void onActivityResult(int requestCode, int resultCode, Intent data) {

    Log.i(TAG, "onActivityResult: Joined");

    if(resultCode == Activity.RESULT_OK){
        switch (requestCode){
            case TAKE_PHOTO_CODE:
                final File file = getTempFile(getView().getContext());
                Toast.makeText(getActivity().getApplicationContext(), "Uri: " + Uri.fromFile(file), Toast.LENGTH_LONG);
                try{
                    Bitmap captureBmp = MediaStore.Images.Media.getBitmap(getActivity().getApplicationContext().getContentResolver(), Uri.fromFile(file));

                    FileOutputStream fos = new FileOutputStream(new File(new File(Environment.getExternalStorageDirectory(), getView().getContext().getPackageName()),"done.png"));
                    captureBmp.compress(Bitmap.CompressFormat.PNG, 90, fos);
                    fos.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                break;
        }
    }

}

事实是,.tmp 文件已存储,并且

的 uri
Bitmap captureBmp = MediaStore.Images.Media.getBitmap(getActivity().getApplicationContext().getContentResolver(), Uri.fromFile(file));

正确。

希望有人能帮助我

你可以使用我的代码:

public static boolean saveImage(Context context, byte[] image, String filename) {
        Bitmap bitmapImage = BitmapFactory.decodeByteArray(image, 0, image.length);
        return saveImage(context, bitmapImage, filename);
    }

    public static boolean saveImage(Context context, Bitmap image, String filename) {
        try {
            FileOutputStream fos = context.openFileOutput(filename,Context.MODE_PRIVATE);
                imagem.compress(Bitmap.CompressFormat.JPEG, 100, fos);

            fos.close();
            File file = context.getFileStreamPath(filename);
        } catch (Exception e) {
            return false;
        }
        return true;
    }