我正在尝试在拍摄后裁剪图像,我的代码如下:
private void doTakePhotoAction() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 96);
intent.putExtra("outputY", 96);
try {
intent.putExtra("return-data", true);
startActivityForResult(intent, PICK_FROM_CAMERA);
} catch (ActivityNotFoundException e) {
//Do nothing for now
}
}
使用上面的代码,我可以进入裁剪模式,裁剪图片 . 但是,不强制执行1:1宽高比,并且outputX和outputY都不是 . 我相信这是因为意图是拍照,而不是剪裁 . 我还从Intent中编写了另一个getData()方法,然后使用以下方法:
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setClassName("com.android.camera", "com.android.camera.CropImage");
但是,当我这样做时,我得到以下运行时错误:
E/AndroidRuntime(14648): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.camera/com.android.camera.CropImage}: java.lang.NullPointerException
谢谢您的帮助! :)
4 回答
在做了一些阅读之后,我意识到它不能这么简单地完成 . 我的修改后的联系人来源是http://github.com/Wysie,您可以查看我为了让它正常工作所做的事情:
希望能帮助到你 :)
看看这篇文章 . 我在我的机器人1.5(Htc Magic)上测试了它并且工作得很好 .
Android Works
你试过这个
Intent
(但保留你已经拥有的crop / aspect / output / return-data extras)?这基本上就是Android contacts application所做的,所以也许它不太适合你的用例(即立即拍照,而不是选择从画廊中选择一张或拍摄新照片) .
无论如何值得一试! :)
虽然这可能是一个非常老的线程,但我能够使用以下代码以编程方式裁剪图片:
然后我裁剪它:
imageTaken是我视图中的ImageView组件 . 你可以看到我的来源Here