您的位置:首页 > 其它

拍照和从相册选择图片 截图

2015-08-04 17:04 246 查看
privateFile tempFile;
privateImageView imgPhoto;
privatestatic final int PHOTO_REQUEST_GALLERY = 1;
privatestatic final int PHOTO_REQUEST_CAREMA = 2;
privatestatic final int PHOTO_REQUEST_CUT = 3;

privateString PHOTO_FILE_NAME="temp.jpg";

第一步,我们可以先激活系统图片或是相机来获取相片

/*


*
从相册获取


*/


public
void
gallery(View
view) {


   
//
激活系统图库,选择一张图片


   
Intent
intent =
new
Intent(Intent.ACTION_PICK);


   
intent.setType(
"image/*"
);


   
//
开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_GALLERY


   
startActivityForResult(intent,
PHOTO_REQUEST_GALLERY);


}


/*


*
从相机获取


*/


public
void
camera(View
view) {


   
//
激活相机


   
Intent
intent =
new
Intent(
"android.media.action.IMAGE_CAPTURE"
);


   
//
判断存储卡是否可以用,可用进行存储


//   
if
(hasSdcard())
{


  
tempFile
=
new
File(Environment.getExternalStorageDirectory(),


PHOTO_FILE_NAME);


  
//
从文件中创建uri


  
Uri
uri = Uri.fromFile(tempFile);


  
intent.putExtra(MediaStore.EXTRA_OUTPUT,
uri);


//   
}


   
//
开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CAREMA


   
startActivityForResult(intent,
PHOTO_REQUEST_CAREMA);


}


第二步,通过startActivityForResult()方法我们可以在onActivityResult()中来获取到相应的返回值

@Override


protected
void
onActivityResult(
int
requestCode,
int
resultCode,
Intent data) {


   
if
(requestCode
== PHOTO_REQUEST_GALLERY) {


  
//
从相册返回的数据


  
if
(data
!=
null
)
{


 
//
得到图片的全路径


 
Uri
uri = data.getData();


 
crop(uri);


  
}


   
}
else
if
(requestCode
== PHOTO_REQUEST_CAREMA) {


  
//
从相机返回的数据


  //
if
(hasSdcard())
{


 
crop(Uri.fromFile(tempFile));


  //
}
else
{


  //
Toast.makeText(MainActivity.
this
,
"未找到存储卡,无法存储照片!"
,
0
).show();


  //
}


   
}
else
if
(requestCode
== PHOTO_REQUEST_CUT) {


  
//
从剪切图片返回的数据


  
if
(data
!=
null
)
{


 
Bitmap
bitmap = data.getParcelableExtra(
"data"
);


 
this
.iv_image.setImageBitmap(bitmap);


  
}


  
try
{


 
//
将临时文件删除


 
tempFile.delete();


  
}
catch
(Exception
e) {


 
e.printStackTrace();


  
}


   
}


   
super
.onActivityResult(requestCode,
resultCode,data);


}


第三步,注意到里边有一个crop()方法,顾名思义,就是用于剪切图片的

/*


*
剪切图片


*/


private
void
crop(Uri
uri) {


   
//
裁剪图片意图


   
Intent
intent =
new
Intent(
"com.android.camera.action.CROP"
);


   
intent.setDataAndType(uri,
"image/*"
);


   
intent.putExtra(
"crop"
,
"true"
);


   
//
裁剪框的比例,1:1


   
intent.putExtra(
"aspectX"
,
1
);


   
intent.putExtra(
"aspectY"
,
1
);


   
//
裁剪后输出图片的尺寸大小


   
intent.putExtra(
"outputX"
,
250
);


   
intent.putExtra(
"outputY"
,
250
);


   
intent.putExtra(
"outputFormat"
,
"JPEG"
);
//
图片格式


   
intent.putExtra(
"noFaceDetection"
,
true
);
//
取消人脸识别


   
intent.putExtra(
"return-data"
,
true
);


   
//
开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CUT


   
startActivityForResult(intent,
PHOTO_REQUEST_CUT);


}


第四步,在剪切完成图片后,切图应用就会将图片通过onActivityResult()返回给我们

通过Bitmap bitmap = data.getParcelableExtra("data");我们就拿到了我们想要的bitmap

由于上边的代码涉及到读写sdcard,所以要记得在清单文件中授权

<uses-permission android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
></uses-permission>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: