近期调一个bug,采用系统的相机拍照后图片变得模糊,经技术领导指点了一下,便找到了原因。
当拍完照片后有两种方式 来获取图片 ,
一 : 在 onActivityResult (....Intent intent) 中通过intent 来获取,这种方式系统会默认 把图片压缩,很不巧的是 项目的代码就是通过这种方式来
取得图片的。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap photo = null;
Bundle bundle = data.getExtras();
if (bundle != null) {
photo = (Bitmap) bundle.get("data");
二:当拍完照后 图片 会存储到 本地 sd卡中,这里存放的就是原图,没有被压缩过,因此比较大,可以通过路径来获取。
private void takePhoto() {
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");
// 1 指定图片保存路径 2.在onactivityresult 中 通过uri 获取
getImageByCamera.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(getTempFile(this)));
startActivityForResult(getImageByCamera, SELECT_PIC_BY_TACK_PHOTO);
} else {
Toast.makeText(getApplicationContext(), "内存卡不存在", Toast.LENGTH_LONG).show();
}
}
// 获取图片
Bitmap photo = null;
final File temp = getTempFile(this);
try {
photo = Media.getBitmap(getContentResolver(),Uri.fromFile(temp));
photo = getBitmap(photo, 400, 400);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
--------------------------------------------
private File getTempFile(Context context) {
// 指定文件路径为 外部存储 即sdcard。 文件夹名字为 项目包名。
/*final File path = new File(Environment.getExternalStorageDirectory(),
context.getPackageName());
if (!path.exists()) {
path.mkdir();
}
return new File(path, "imagefilename");*/
File temp = new File(CacheStorage.getCacheDir(mContext), "picN.jpg");
return temp ;
}
通过方式二来获取图片后再进过 我们自己处理(压缩) 就是清晰的图了。