在我的应用程序中有一个活动,从相机中拍摄一张照片,保存它并显示在ImageView Follingby上。我使用FilePath类来指出将其存储在路径上的位置,CameraUtils类来获取file:uri并将图像转换为位图。现在我的任务是添加一个crop功能,以摆脱我们感兴趣的区域。裁剪功能应该在屏幕上激活,刚拍摄了一张照片,然后裁剪的照片需要保存才能显示。在此之前,请参阅添加crop前的工作代码:
/* Capture Image Method */
private void captureImage() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//Start intent with Action_Image_Capture
fileUri = CameraUtils.getOutputMediaFileUri(this);//get fileUri from CameraUtils
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);//Send fileUri with intent
//intent.putExtra("return-data",true); // Should be for crop
startActivityForResult(intent, CAMERA_REQUEST_CODE);//start activity for result with CAMERA_REQUEST_CODE
}
/* Show Captured over ImageView */
private void showCapturedImage() {
if (!getImageUrl.equals("") && getImageUrl != null)
imageView.setImageBitmap(CameraUtils.convertImagePathToBitmap(getImageUrl, false));
else
Toast.makeText(this, R.string.capture_image_failed, Toast.LENGTH_SHORT).show();
}
private void CropImage() {
try {
Intent CropIntent = new Intent("com.android.camera.action.CROP");
CropIntent.setDataAndType(uri, "image/*");
CropIntent.putExtra("crop", "true");
CropIntent.putExtra("outputX", 180);
CropIntent.putExtra("outputY", 180);
CropIntent.putExtra("aspectX", 3);
CropIntent.putExtra("aspectY", 4);
CropIntent.putExtra("scaleUpIfNeeded", true);
CropIntent.putExtra("return-data", true);
startActivityForResult(CropIntent, 1003);
} catch (ActivityNotFoundException ex) {
//
}
}
onActivityResult()方法:
/**
* public static final int PERMISSION_REQUEST_CODE = 1001;//request code for Camera and External Storage permission
* private static final int CAMERA_REQUEST_CODE = 1002;//request code for capture image
* private static final int CROP_REQUEST_CODE = 1003;//request code for crop
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case CAMERA_REQUEST_CODE:
try {
//When image is captured successfully
if (resultCode == RESULT_OK) {
//Check if device SDK is greater than 22 then we get the actual image path via below method
if (Build.VERSION.SDK_INT > 22)
getImageUrl = FilePath.getPath(MainActivity.this, fileUri);
else
//else we will get path directly
getImageUrl = fileUri.getPath();
//After image capture show captured image over image view
showCapturedImage();
} else
Toast.makeText(this, R.string.cancel_message, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
break;
}
}
在此之前,所有的工作都很好,但是当涉及到插入crop函数时,我正在努力将具有所需请求代码的if else/语句添加到switch/case语句中,因为它会抛出未知错误。你能帮我创建正确的逻辑与多个请求代码,并使其工作,请?
在做了以下更改后,我可以使它工作。
首先,CropIntent通过键对值传递值,而键对值应该通过mediastore.extra_output传递,并且uri没有用正确的名称定义。
private void CropImage() {
try {
Intent CropIntent = new Intent("com.android.camera.action.CROP");
CropIntent.setDataAndType(fileUri, "image/*");
fileUri = CameraUtils.getOutputMediaFileUri(this);
CropIntent.putExtra("crop", "true");
CropIntent.putExtra("outputX", 180);
CropIntent.putExtra("outputY", 180);
CropIntent.putExtra("aspectX", 3);
CropIntent.putExtra("aspectY", 4);
CropIntent.putExtra("scaleUpIfNeeded", true);
CropIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(CropIntent, CROP_REQUEST_CODE);
} catch (ActivityNotFoundException ex) {
//
}
}
我必须做一个按钮,将提供从画廊或从相机选择图像。 结果是有效的。如果我从图库中选择,图像查看器将查看它,如果我选择从相机拍照,它也有效。问题是,在我的show FileChooser()方法中,我所有的意图都在同时运行,所以当我从图库中选择时,相机仍然运行。我选择相机,图库也在打开。我认为我应该在切换案例模式下实现我的代码,但我不明白如何做到这一点。请帮助解决我的初学者问题。
问题内容: 我需要在手机中打开我的画廊,然后选择一张在活动中在imageview中打开的图片..没什么困难..但是我在模拟器(genymotion)中有完美的代码和thise代码可以运行..但是在小米Mi4上却没有。 打开画廊选择项目,什么也没有。 我没有更多的电话了:( 我尝试下载一些与此主题相关的示例,并且每个示例都是相同的。 您是否有一些从图库中选择图像并在imageview中显示的项目?如
我的代码在下面..在中 在onActivityResult(int requestCode,int resultCode,Intent data)中
编辑:我调试了应用程序,并用初始化了。这消除了错误,但是现在ImageView没有得到更新,但是当我从Gallery中选择image时,它已经更新了。
本文向大家介绍Android开发从相机或相册获取图片裁剪,包括了Android开发从相机或相册获取图片裁剪的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,直接给大家贴代码了。 以上代码很简单,相信大家都可以看的懂吧,欲了解更多信息请持续关注本站,谢谢。
有没有一个标准的方法来调用对话框选择从相机或从图库(如内置电话簿或Skype)的图像? 我看了一下这个,但是代码打开了图库,没有建议从相机中选择它。 设备:Samsung Galaxy Tab Android:2.3.3