拍照和从相册选择图片 截图
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";
第一步,我们可以先激活系统图片或是相机来获取相片
第二步,通过startActivityForResult()方法我们可以在onActivityResult()中来获取到相应的返回值
第三步,注意到里边有一个crop()方法,顾名思义,就是用于剪切图片的
第四步,在剪切完成图片后,切图应用就会将图片通过onActivityResult()返回给我们
通过Bitmap bitmap = data.getParcelableExtra("data");我们就拿到了我们想要的bitmap
由于上边的代码涉及到读写sdcard,所以要记得在清单文件中授权
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>
相关文章推荐
- 如何处理ul/ol下li左边有段空白的样式问题
- MySQL优化GROUP BY-松散索引扫描与紧凑索引扫描
- JNI调用机制与JNI实现
- Android BLE 蓝牙低功耗教程,中央BluetoothGatt和周边BluetoothGattServer的实现
- JS中的Call和apply
- Java读取properties文件中文乱码问题解决
- 【Python】阿里巴巴API签名生成
- springmvc:406
- HDU1317 XYZZY
- HBase - MapReduce - HBase 作为输入源的示例 | 那伊抹微笑
- CF 469A I Wanna Be the Guy
- mybatis 输入映射和输出映射
- SQL 优化
- 国内首个大数据平台性能标准制定完成
- java异常处理
- hdu1014
- 如何将CSV数据导入MySQL?
- Lua教程:C++和Lua相互传递数据(2)
- <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 的说明 (IE兼容性模式)
- oracle常用命令总结