如何在裁剪后保存文件?

时间:2012-11-10 22:49:24

标签: android image crop

我正在创建一个Android应用程序。它需要一张图片然后允许你裁剪它然后显示它。问题是它只保存拍摄的图像而不是裁剪的图像。基本上我需要它来保存裁剪的图像。如何在裁剪后保存文件?

代码:

private void performCrop(){
    //take care of exceptions
    try {
        //call the standard crop action intent (the user device may not support it)
        Intent cropIntent = new Intent("com.android.camera.action.CROP"); 
        //indicate image type and Uri
        cropIntent.setDataAndType(picUri, "image/*");
        //set crop properties
        cropIntent.putExtra("crop", "true");
        //indicate aspect of desired crop
        cropIntent.putExtra("aspectX", 1);
        cropIntent.putExtra("aspectY", 1.5);
        //indicate output X and Y
        cropIntent.putExtra("outputX", 256);
        cropIntent.putExtra("outputY", 256);
        //retrieve data on return
        cropIntent.putExtra("return", true);
        //start the activity - we handle returning in onActivityResult
        startActivityForResult(cropIntent, PIC_CROP);  

    }

    //respond to users whose devices do not support the crop action
    catch(ActivityNotFoundException anfe){
        //display an error message 
        String errorMessage = "Your device does not support cropping";
        Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);
        toast.show();
    }
}

1 个答案:

答案 0 :(得分:3)

只需添加以下内容:

    try{    
        File file = new File(Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_PICTURES 
            ), fileName+".png"); //save to your pictures folder
     outputFileURI = Uri.fromFile(file);

     cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileURI);
     startActivityForResult(cropIntent, PIC_CROP); 
    } catch (IOException ioe){ 
        // handle your exception
     }

请务必在保存后刷新库,以便在库中立即显示。那么可以在你的onActivityResult方法中使用这段代码吗?

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse
                    ("file://" + Environment.getExternalStorageDirectory())));

编辑:找到更好的刷新图库的方法,因为如果只刷新一张图片,sendBroadcast可能会效率低下。使用MediaScanner扫描文件

Intent intent =   new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
                intent.setData(outputFileURI); // Add the path to the file
                sendBroadcast(intent); 

这将只扫描新文件并刷新而不是整个图库。