【发布时间】:2016-03-09 05:51:50
【问题描述】:
我浏览了许多链接并检查了各种代码,但它还不符合我的要求。
这是我的要求;
- 我想从手机内存或 sd 卡中选择图像(给用户选择图像目录的选项)并裁剪它。
其中的问题,在棒棒糖操作系统中,当我从图库中选择图像时,它不提供裁剪选项,因此 getData 返回 null 但如果我从照片中选择图像,它会裁剪图像并保存它,因此 getData 返回 URI 但原始图像被这个裁剪的覆盖。
- 在 Jellybean 中情况正好相反,如果我从图库中选择图像,一切正常,但从照片中,裁剪选项不会出现。
下面是代码sn-p..
public void selectImageFromGallery()
{
try
{
Globals g = (Globals) getApplication();
int iWidthDP = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, g.screenWidth, getResources().getDisplayMetrics());
int iHeightDP = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 0);
intent.putExtra("aspectY", 0);
intent.putExtra("outputX", iWidthDP);
intent.putExtra("outputY", iHeightDP);
intent.putExtra("return-data", true);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_FROM_GALLERY);
}
catch(Exception ex)
{
Toast toast = Toast.makeText(this, "exception occurred in selectImageFromGallery" +
ex.getMessage().toString(), Toast.LENGTH_SHORT);
toast.show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
try
{
if ((requestCode == PICK_FROM_GALLERY || requestCode == PICK_FROM_CAMERA)
&& resultCode == RESULT_OK && null != data)
{
if (resultCode == RESULT_OK)
{
Bitmap bitmap = null;
Uri selectedImage = null;
if(requestCode == PICK_FROM_GALLERY || requestCode == PICK_FROM_CAMERA) {
selectedImage = data.getData();
if(selectedImage == null)
selectedImage = (Uri)data.getExtras().get("data");
}
if (Build.VERSION.SDK_INT < 19)
{
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
bitmap = BitmapFactory.decodeFile(picturePath);
}
else
{
ParcelFileDescriptor parcelFileDescriptor;
try {
parcelFileDescriptor = getContentResolver().openFileDescriptor(selectedImage, "r");
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
bitmap = BitmapFactory.decodeFileDescriptor(fileDescriptor);
parcelFileDescriptor.close();
} catch (FileNotFoundException ex) {
Toast toast = Toast.makeText(this, "exception occurred in onActivityResult" + ex.getMessage().toString(), Toast.LENGTH_SHORT);
toast.show();
} catch (Exception ex) {
Toast toast = Toast.makeText(this, "exception occurred in onActivityResult" + ex.getMessage().toString(), Toast.LENGTH_SHORT);
toast.show();
}
}
image.setScaleType(ImageView.ScaleType.FIT_XY);
image.setImageBitmap(bitmap);
}
}
}
catch(Exception ex)
{
Toast toast = Toast.makeText(this, "exception occurred in onActivityResult" + ex.getMessage().toString(), Toast.LENGTH_SHORT);
toast.show();
}
}
}
提前谢谢..
【问题讨论】:
-
从图库或相机中选择图像时是否要裁剪图像?
-
两者兼而有之,但现在让我们先关注图库。
-
我建议你使用库,这很容易
-
你能建议使用哪个库或给我链接,我会检查。
-
检查我的答案@Gvs13
标签: android bitmapimage