我需要从图库中裁剪图像并保存到服务器。这是我裁剪图像的代码
private void startCropImage() {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(mImageCaptureUri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//indicate output X and Y
intent.putExtra("outputX", 400);
intent.putExtra("outputY", 487);
intent.putExtra("return-data", true);
intent.putExtra("scale", true);
startActivityForResult(intent, CROP_FROM_GALLERY);
}
我需要400*487的输出,但是在裁剪图像后,当我检查宽度时,它在设备上只有160,但在AVD上它显示正确的宽度。为什么会这样呢?以下是我的onActivityResult代码
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Bundle extras2 = data.getExtras();
if (extras2 != null) {
Bitmap bm2 = extras2.getParcelable("data");
imgview.setImageBitmap(bm2);
int width = bm2.getWidth();}
我不知道你可能知道这个库是我的建议,只是我没有在代码方面给出答案,我给出选项
为什么要重新发明轮子 :)(当然我们可以改进)
https://github.com/edmodo/cropper
检查这一行:
Bitmap bm2 = extras2.getParcelable("data");
intent只能传输有限数量的数据。根据版本或设备的不同,它的范围可能在200kb到1mb之间。因此,这一行返回的是裁剪图像的缩略图。要获得完整的图像,请执行以下操作。记住,你不能得到你想要的确切宽度。
Uri selectedImage = data.getData();
String[] filePath = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(
selectedImage, filePath, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
Bitmap bmp= BitmapFactory.decodeFile(filePath);
您需要裁剪图像的文件系统中的实际路径。 crop不是官方的android意图。像gallery和camera这样的应用程序支持它,但有许多设备不支持这个意图。看看@commonsware的这篇博文吧。在这篇文章中,我已经回答了使用库裁剪图像。