首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Cooliris拍摄和裁剪图像

使用Cooliris拍摄和裁剪图像
EN

Stack Overflow用户
提问于 2013-06-03 17:19:48
回答 1查看 566关注 0票数 0

我已经在我的应用程序中实现了拍照和裁剪。通常情况下,它工作得很完美。但这个问题出现在使用Cooliris gallery的设备上。拍摄图像后,将显示消息"Gallery(process com.cooliris.media)已意外停止“。不幸的是,我没有这样的设备,也不能测试它。但我从车祸记录中找到了一条线索。

代码语言:javascript
复制
E/AndroidRuntime(20624): Caused by: java.lang.NullPointerException
E/AndroidRuntime(20624):    at com.cooliris.media.CropImage.loadBitmap(CropImage.java:460)
E/AndroidRuntime(20624):    at com.cooliris.media.CropImage.onCreate(CropImage.java:443)
E/AndroidRuntime(20624):    at android.app.Activity.performCreate(Activity.java:4465)
E/AndroidRuntime(20624):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
E/AndroidRuntime(20624):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1932)
E/AndroidRuntime(20624):    ... 11 more

我用来拍照的代码:

代码语言:javascript
复制
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
imageCaptureUri = Uri.fromFile(getTempImageFile());
intent.putExtra("return-data", true);
startActivityForResult(intent, INTENT_PICK_FROM_CAMERA);

裁剪图像的代码(在onActivityResult中用于此目的):

代码语言:javascript
复制
Intent intent = new Intent("com.android.camera.action.CROP");
intent.addCategory("android.intent.category.DEFAULT");
intent.addCategory("android.intent.category.ALTERNATIVE");
intent.addCategory("android.intent.category.SELECTED_ALTERNATIVE");
intent.setDataAndType(data.getData(), "image/jpeg");
intent.putExtra("outputX", CROPPED_IMAGE_X);
intent.putExtra("outputY", CROPPED_IMAGE_Y);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
intent.putExtra("return-data", true);
startActivityForResult(intent, INTENT_CROP_FROM_CAMERA);

看起来data.getData()是空的,但我不确定。有没有人知道什么可能是问题以及如何解决它?

EN

回答 1

Stack Overflow用户

发布于 2013-07-08 20:37:07

我也有一个裁剪功能的问题(只有cooliris媒体):

Cooliris媒体异常:

代码语言:javascript
复制
E/AndroidRuntime(4439): java.lang.RuntimeException: 
Unable to start activity ComponentInfo{com.cooliris.media/com.cooliris.media.CropImage}: java.lang.NullPointerException
...
E/AndroidRuntime(4439): Caused by: java.lang.NullPointerException
at com.cooliris.media.CropImage.onCreate(CropImage.java:276)

我通过为ACTION_IMAGE_CAPTURE意图提供正确的输出文件解决了这个问题。这对我很有效:

代码语言:javascript
复制
private static Uri tempFileUri = null;
...
String fileName = "myImg.tmp";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, fileName);
values.put(MediaStore.Images.Media.DESCRIPTION, "test description");
tempFileUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
if (tempFileUri != null) {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempFileUri); 
    ...
    startActivityForResult(takePictureIntent, IntentConstants.INTENT_REQUEST_CODE_TAKE_PHOTO);
}

我不再使用intent.putExtra("return-data", true);,因为有些设备不返回数据(有些只返回小图像--似乎每个设备的行为都不同)。也许这就是在cooliris媒体中发生NullPointer异常(发送到cooliris的数据为空)的原因。cooliris就这么崩溃了真的很烦人。

裁剪图像的代码(在onActivityResult中用于此目的):

代码语言:javascript
复制
Uri picUri = null;
if (intent.getData() != null) {
    picUri = intent.getData();
} else {
    picUri = tempFileUri;
}
Intent cropIntent = new Intent("com.android.camera.action.CROP");
cropIntent.setDataAndType(picUri, "image/*");
cropIntent.putExtra("crop", "true");
cropIntent.putExtra("aspectX", 1);
cropIntent.putExtra("aspectY", 1);
cropIntent.putExtra("outputX", 56);
cropIntent.putExtra("outputY", 56);
cropIntent.putExtra("return-data", true);
startActivityForResult(cropIntent, INTENT_REQUEST_CODE_CROP_PHOTO);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16893520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档