0

几天来,我一直在努力创建一个活动,从相机中挑选图像并有效地将其裁剪成正方形(而不是将图像加载到内存中)。

拍照没什么大不了的:

Intent mediaPickingIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
mediaPickingIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

startActivityForResult(mediaPickingIntent, REQUEST_CODE_GENERIC);

然后,我尝试为每个设备使用 OOTB 裁剪功能,例如:

String cropDestinationPath = getTemporaryImagePath();
Uri destination = Uri.fromFile(new File(cropDestinationPath));

Intent cropIntent = new Intent("com.android.camera.action.CROP");
cropIntent.setDataAndType(source, "image/*");
cropIntent.putExtra("crop", "true");
cropIntent.putExtra("aspectX", 1);
cropIntent.putExtra("aspectY", 1);
cropIntent.putExtra("outputX", SQUARE_IMAGE_SIZE);
cropIntent.putExtra("outputY", SQUARE_IMAGE_SIZE);
cropIntent.putExtra("return-data", false);
cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, destination);

startActivityForResult(cropIntent, REQUEST_CODE_IMAGE_CROP);

现在,使用 IMAGE_CAPTURE 的输出路径,我能够检索表示图像已旋转(即:270 度)的 exif 数据,但意图似乎并不关心 exif 数据。

我正在将生成的路径转换为 ​​uri,例如:

    private Uri convertPathToContentUri(String imagePath) throws Exception {
            String imageName = null;
            String imageDescription = null;
            String uriString = MediaStore.Images.Media.insertImage(getContentResolver(), imagePath, imageName, imageDescription);
            return Uri.parse(uriString);
    }

顺便说一句:我正在三星设备上对此进行测试,Nexus 上的相同代码可以正常工作。

4

0 回答 0