从相机裁剪图像并保存

时间:2014-10-23 14:41:36

标签: android image camera save crop

我有这个班级,我拍照并保存没有问题。如果可能的话<我希望在拍摄照片后添加裁剪功能。我做了一些研究,但我找不到我需要的东西。我不明白如何保存裁剪的图像。我看到了一些例子,但没有人给出我想要的答案。所有这些都只是拍照,裁剪,并在ImageView中显示。

public class TakePicture extends Activity {

    private static final String TAG = "CallCamera";
    private static final int CAPTURE_IMAGE_ACTIVITY_REQ = 0;

    private Uri fileUri = null;
    private ImageView photoImage = null;
    private String fileName = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        File file = getOutputPhotoFile();
        fileUri = Uri.fromFile(getOutputPhotoFile());
        i.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
        startActivityForResult(i,
                Constantes.CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);

    }

    private File getOutputPhotoFile() {
        File directory = new File(
                Environment
                        .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
                getString(R.string.app_name));
        if (!directory.exists()) {
            if (!directory.mkdirs()) {
                Log.e(TAG, "Failed to create storage directory.");
                return null;
            }
        }

        String timeStamp = new SimpleDateFormat("yyyMMdd_HHmmss")
                .format(new Date());
        fileName = "IMG_" + timeStamp + ".jpg";
        return new File(directory.getPath() + File.separator + fileName);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == Constantes.CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
            if (resultCode == RESULT_OK) {
                Uri photoUri = null;
                if (data == null) {
                    photoUri = fileUri;
                    setDataPhoto(photoUri);
                } else {
                    photoUri = data.getData();
                    setDataPhoto(photoUri);
                }
            } 
            finish();
        }
    }

    private void setDataPhoto(Uri photoUri) {
        String filePath = photoUri.getPath();
        fileName = filePath.substring(filePath.lastIndexOf(File.separator) + 1);
        Intent intent = new Intent();
        intent.putExtra(Constantes.IMAGE_PATH, filePath);
        intent.putExtra(Constantes.IMAGE_NAME, fileName);
        setResult(Activity.RESULT_OK, intent);
        finish();
    }

}

1 个答案:

答案 0 :(得分:0)

您应该使用Bitmap。您可以使用BitmapFactory轻松地将照片转换为Bitmap。它可以从文件路径,字节数组等创建位图。看看BitmapFactory

然后你可以按照你想要的方式裁剪它。将照片转换为位图后,必须使用该方法;

Bitmap dest=Bitmap.createBitmap(Bitmap source, int x, int y, int width, int height);

这里x和y是起点的坐标,即左下角的部分。请注意,您输入的宽度和高度不能大于原始位图的尺寸。