android照相、相册获取图片剪裁报错的解决方法


这是调用相机 

	public static File getImageFromCamer(Context context, File cameraFile,
			int REQUE_CODE_CAMERA, Intent intent) {
		intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
		File fileDir = HelpUtil.getFile(context, "/Tour/user_photos");
		cameraFile = new File(fileDir.getAbsoluteFile() + "/"
				+ System.currentTimeMillis() + ".jpg");
		intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile));
		((Activity) context).startActivityForResult(intent, REQUE_CODE_CAMERA);
		return cameraFile;
	}

在这里我返回了一个file对象,这是应为项目中需要,大家可以不必真写,直接传一个Uri对象过来就好了

 

下面是调用相册

 

public static void getImageFromPhoto(Context context, int REQUE_CODE_PHOTO) {
		Intent intent = new Intent(Intent.ACTION_PICK, null);
		intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
				"image/*");
		((Activity) context).startActivityForResult(intent, REQUE_CODE_PHOTO);
 
	}

当然接下来是调用Activity的OnActivityResult了

 

 

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (resultCode == RESULT_OK) {
			switch (requestCode) {
			case ConstantUtil.REQUE_CODE_CAMERA:
				uri = Uri.fromFile(cameraFile);
				PhotoUtil.startPhotoZoom(context, uri,
						ConstantUtil.REQUE_CODE_CROP);
				break;
			case ConstantUtil.REQUE_CODE_PHOTO:
				if (null != data) {//为了取消选取不报空指针用的
					uri = data.getData();
					PhotoUtil.startPhotoZoom(context, uri,
							ConstantUtil.REQUE_CODE_CROP);
				}
				break;
			case ConstantUtil.REQUE_CODE_CROP:
				if(uri==null){
					break;
				}
				cropBitmap=HelpUtil.getBitmapFromUri(uri,context);
				if (cropBitmap != null) {
					iv_headphoto.setImageBitmap(cropBitmap);
 
					baos = new ByteArrayOutputStream();
					cropBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
					headPicString = new String(Base64.encode(
							baos.toByteArray(), 0));
					UploadPic(headPicString);
				}
 
				break;
			default:
				break;
			}
		}

当然还有大家关心的剪切

public static void startPhotoZoom(Context context, Uri uri,
			int REQUE_CODE_CROP) {
		int dp = 500;
 
		Intent intent = new Intent("com.android.camera.action.CROP");
		intent.setDataAndType(uri, "image/*");
		// 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
		intent.putExtra("crop", "true");
		intent.putExtra("scale", true);// 去黑边
		intent.putExtra("scaleUpIfNeeded", true);// 去黑边
		// aspectX aspectY 是宽高的比例
		intent.putExtra("aspectX", 1);//输出是X方向的比例
		intent.putExtra("aspectY", 1);
		// outputX outputY 是裁剪图片宽高,切忌不要再改动下列数字,会卡死
		intent.putExtra("outputX", dp);//输出X方向的像素
		intent.putExtra("outputY", dp);
		intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
		intent.putExtra("noFaceDetection", true);
		intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
		intent.putExtra("return-data", false);//设置为不返回数据
 
		((Activity) context).startActivityForResult(intent, REQUE_CODE_CROP);
	}

在很多博客中都把“return-data”设置为了true然后在onActivityResult中通过data.getParcelableExtra("data")来获取数据,不过这样的话dp这个变量的值就不能太大了,不然你的程序就挂了。这里也就是我遇到问题的地方了,在大多数高配手机上这样用是没有问题的,不过很多低配手机就有点hold不住了,直接就异常了,包括我们的国产神机米3也没能hold住,所以我建议大家不要通过return data 大数据,小数据还是没有问题的,说以我们在剪切图片的时候就尽量使用Uri这个东东来帮助我们。

下面是我们进行剪裁用到的一些参数

Exta Options Table for image/* crop:

 

SetExtra DataType Description
crop String Signals the crop feature
aspectX int Aspect Ratio
aspectY int Aspect Ratio
outputX int width of output created from this Intent
outputY int width of output created from this Intent
scale boolean should it scale
return-data boolean Return the bitmap with Action=inline-data by using the data
data Parcelable Bitmap to process, you may provide it a bitmap (not tested)
circleCrop String if this string is not null, it will provide some circular cr
MediaStore.EXTRA_OUTPUT ("output") URI Set this URi to a File:///, see example code


最后把通过Uri获得bitmap的方法给大家贴上

 

public static Bitmap getBitmapFromUri(Uri uri,Context mContext)
	 {
	 try
	 {
	  // 读取uri所在的图片
	  Bitmap bitmap = MediaStore.Images.Media.getBitmap(mContext.getContentResolver(), uri);
	  return bitmap;
	 }
	 catch (Exception e)
	 {
	  e.printStackTrace();
	  return null;
	 }
	 }



相关阅读:
查看修改mysql编码方式让它支持中文(gbk或者utf8)
使用PHP和HTML5 FormData实现无刷新文件上传教程
三星笔记本(910S3K-K03)U盘装win7系统图文教程 三星笔记本u盘装win7
Javascript刷新窗口方法小结
jquery实现左右滑动菜单效果代码
微软正在内测win10 Build 10550版本 有望推送快速版
win10 Build 10108版本截图图赏:UI新的改进
Android实现将已发送的短信写入短信数据库的方法
c#委托学习示例分享
php实现MD5加密16位(不要默认的32位)
在Win10中回收站等桌面图标不见了怎么显示?
剖析标注HTML元素时class比id所具有的优势
Win10正式版哪些预装的应用可以卸载?Win10释放空间的详细教程
Win7系统双击Adminiatrator帐户提示“读取错误,工作站服务没有启动”的解决方法
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 致我最好的朋友——王悦作文1000字 梧桐,牵动我的情丝 只做自己懂的事 李开复人才观 烟花,绽放作文350字 市人民医院集体先进事迹申报材料 《功夫熊猫》影片评论作文400字 有关我的父亲的作文:我的父亲 2016党支部党员承诺书 市旅游产业发展实施意见 心中的足印作文1200字 抓源头促清廉征文 2006年中考小说阅读备考资料 胸外科护士述职报告 怦然心动的一刻作文1100字 小学六年级作文600字:读鲁滨逊漂流记有感 都市拾荒者 一个人的那场"地老天荒" 其实,我一直在等你! 出国留学计划书 初中初一作文300字:朗诵比赛 母亲,感谢一路有你 马云发年终奖 农机监理个人工作总结-个人工作总结 观电影《上学路上》有感500字 汪曾祺散文《故乡人》原文 播撒激情奉献,传承恩来文化 受伤了,别哭 潜意识与潜规则 小学六年级作文550字:三清山一游 他在笑,如此温暖过一生 思念一个朋友 “词王争霸”真好玩作文 1200字除夕来历作文:古老习俗 歇后语 以公民的名义 学习江泽民执政党建设思想座谈会发言摘要 昔日阳光下 有关秋的语句-关于描写秋天的经典语句 石缝中的小生命作文500字 有了自己的窝 县廉租住房保障工作汇报材料 2016计生幸福家庭建设方案 关于回报的作文100字 表演艺考自我介绍 淡名利(伤感语录) 想念..... QQ发红包祝福语 我的中国梦演讲稿范文精选 《空气.气球.风》到底谁是谁的故事

Copyright © 2016 phpStudy |