android中添加图片的两种方式,对图片的自由裁切
2014-08-27 19:51
302 查看
好久没有更新博客了,这几天又要弄一个类似名片的项目,有一个可以自己选择添加照片的功能。
就弄了俩选择,拍摄还是选择本地图片,实际上还是通过Intent来跳转到各自的界面,如何得到拍摄好/选择好的图片呢,就要用到activity中重要的一个方法,onActivityResult,如果在事先跳转的Intent对象上使用startActivityForResult方法就能在onActivityResult获取到信息了。
拍照,调用系统照相机: Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //调用摄像机
Context.startActivityForResult(intent,TAKE_PHOTO);
选择本地图片:
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);//调用android的图库
Context.startActivityForResult(intent, SELECT_PHOTO);
然后在获取图片的Activity中得到intent参数
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == TAKE_PHOTO){
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");
}else if(requestCode ==SELECT_PHOTO{
Uri uri = data.getData();
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = this.managedQuery(uri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path = cursor.getString(column_index);
if (bitmap != null)// 如果不释放的话,不断取图片,将会内存不够
bitmap.recycle();
bitmap = BitmapFactory.decodeFile(path);
}
)
}
注意TAKE_PHOTO和SELECT_PHOTO是一个int值,是自己事先设置好的值,能区分开用户是选择了哪一个方法。两种方法根据返回的intent对象来获取bitmap的方式都不一样。
之后就是自由裁切,我们调用android系统中自带的裁切工具,这同样需要intent来跳转并且同样需要返回数据给activity:
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
//开启裁剪功能
intent.putExtra("crop", "true");
//设定宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//设定裁剪图片宽高
intent.putExtra("outputX", 100);
intent.putExtra("outputY", 100);
//要求返回数据
intent.putExtra("return-data", true);
Context.startActivityForResult(intent, CUT_PHOTO);
就弄了俩选择,拍摄还是选择本地图片,实际上还是通过Intent来跳转到各自的界面,如何得到拍摄好/选择好的图片呢,就要用到activity中重要的一个方法,onActivityResult,如果在事先跳转的Intent对象上使用startActivityForResult方法就能在onActivityResult获取到信息了。
拍照,调用系统照相机: Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //调用摄像机
Context.startActivityForResult(intent,TAKE_PHOTO);
选择本地图片:
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);//调用android的图库
Context.startActivityForResult(intent, SELECT_PHOTO);
然后在获取图片的Activity中得到intent参数
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == TAKE_PHOTO){
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");
}else if(requestCode ==SELECT_PHOTO{
Uri uri = data.getData();
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = this.managedQuery(uri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path = cursor.getString(column_index);
if (bitmap != null)// 如果不释放的话,不断取图片,将会内存不够
bitmap.recycle();
bitmap = BitmapFactory.decodeFile(path);
}
)
}
注意TAKE_PHOTO和SELECT_PHOTO是一个int值,是自己事先设置好的值,能区分开用户是选择了哪一个方法。两种方法根据返回的intent对象来获取bitmap的方式都不一样。
之后就是自由裁切,我们调用android系统中自带的裁切工具,这同样需要intent来跳转并且同样需要返回数据给activity:
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
//开启裁剪功能
intent.putExtra("crop", "true");
//设定宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//设定裁剪图片宽高
intent.putExtra("outputX", 100);
intent.putExtra("outputY", 100);
//要求返回数据
intent.putExtra("return-data", true);
Context.startActivityForResult(intent, CUT_PHOTO);
相关文章推荐
- Android图片添加阴影效果的两种方式
- Android图片添加阴影效果的两种方式
- Android图片添加阴影效果的两种方式
- android带有文字的图片按钮的两种实现方式
- swing 组件——在JLabel中添加图片的两种方式
- Android实战简易教程<四十九>(两种方式实现网络图片异步加载)
- [Android开发实战]Android添加快捷方式到桌面的两种方式
- Android中保存图片的两种方式
- 通过.NET程序给图片添加文字的两种方式~
- Android textView 添加超链接(两种实现方式)
- android图片截取的两种方式
- android textView WebView 两种方式 显示html 格式文本 带图片
- Android根据图片文件名获取它的资源ID 的两种方式
- Android中保存图片的两种方式
- android/IOS常用图片上传的两种方式
- Android中保存图片的两种方式
- Android中动态添加View的两种方式
- [Android]获取拍照完的图片的数据两种方式