每次使用camera
裁剪图片时,我都会收到错误Unable to load image
。但就gallery
而言,它运作良好。
Uri uriPath = StoreAndFetchImageFromFile.getInstance(ParentDetails.this).getImageUri(partFilename);
selectedimagepath = getPath(uriPath);
Bitmap myBitmap = BitmapFactory.decodeFile(selectedimagepath);
parentimage.setImageBitmap(myBitmap);
performCropCamera(uriPath);
imagecrop
的方法是:
private void performCropCamera(Uri picUri) {
// 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");
int asp = (int) (DeviceDimensions.getScreenWidth() - 80)/187;
// indicate aspect of desired crop
cropIntent.putExtra("aspectX", asp);
cropIntent.putExtra("aspectY", 3);
// indicate output X and Y
cropIntent.putExtra("outputX", DeviceDimensions.getScreenWidth() - 80);
cropIntent.putExtra("outputY", 187*3);
// retrieve data on return
cropIntent.putExtra("return-data", 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) {
Toast toast = Toast
.makeText(this, "This device doesn't support the crop action!", Toast.LENGTH_SHORT);
toast.show();
}
}
图片裁剪的OnActivity
结果为:
if (requestCode == PIC_CROP) {
// get the returned data
Bundle extras = data.getExtras();
// get the cropped bitmap
Bitmap thePic = extras.getParcelable("data");
parentimage.setImageBitmap(thePic);
}
答案 0 :(得分:0)
命令后可能会以不同的格式返回。意图中的文件可以隐藏在几个不同的地方,可以通过几种不同的方式访问它们以使流启动。还有一些具有权限的项目。相机意图可能会以一种方式为您提供数据,并且裁剪意图可能以不同的方式返回裁剪的数据。所以你不能指望两者是一样的。你必须覆盖所有的基础。
请记住,这只是您设备的CROP功能。其他设备不具备裁剪功能,并且它们的工作效果也可能不同。我不会相信他们中的很多人。它实际上是绘制框并在另一个位图中绘制位图。我使用第三方库并将其包含在您的应用中。然后你可以确定它有效。
虽然听起来不错。您无法确定该功能是否存在。更不用说它会以一致的方式发挥作用。
如果我记得该文件可以在文件流中的附加内容中。它可以是content://或file:// object。权限可能会变得非常好。画廊倾向于将它们作为没有命名后缀的content://文件返回,而相机可能会给出可以读取的文件后缀。
我已经看过几次这样的东西,你需要查看从库中返回的东西的名称以了解文件类型,而其他时候它正确包含的URI会给你正确的后缀。
这些和其他原因基本上使作物意图在功能上毫无价值。如果我不得不猜测文件的存储方式与从裁剪返回时的预期方式不同。我用的是:
public Uri getUriFromIntent(Intent intent) {
Uri uri = intent.getData();
if (uri != null) return uri;
Bundle bundle = intent.getExtras();
if (bundle == null) return null;
Object object = bundle.get(Intent.EXTRA_STREAM);
if (object instanceof Uri) {
return (Uri) object;
}
return null;
}
希望找到它可能的位置,因为不同的东西将文件放在一堆不同的地方,如果你不确定提供给他们的确切服务,试图找到它们真的很难找给你的URI。