欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android图像绘制(六)获取本地图片或拍照图片等图片资源

程序员文章站 2023-12-02 18:48:52
从sd卡中获取图片资源,或者拍一张新的图片。 先贴代码 获取图片: 注释:拍照获取的话,可以指定图片的保存地址,在此不说明。 复制代码 代码如下: charsequence...
从sd卡中获取图片资源,或者拍一张新的图片。
先贴代码
获取图片
注释:拍照获取的话,可以指定图片的保存地址,在此不说明。
复制代码 代码如下:

charsequence[] items = {"相册", "相机"};
new alertdialog.builder(this)
.settitle("选择图片来源")
.setitems(items, new onclicklistener() {
public void onclick(dialoginterface dialog, int which) {
if( which == select_picture ){
intent intent = new intent(intent.action_get_content);
intent.addcategory(intent.category_openable);
intent.settype("image/*");
startactivityforresult(intent.createchooser(intent, "选择图片"), select_picture);
}else{
intent intent = new intent(mediastore.action_image_capture);
startactivityforresult(intent, select_camer);
}
}
})
.create().show();

处理图片,方法一,直接处理返回图片
注释
1、网上有说明,直接处理返回的图片是被系统压缩过的,不过自己在测试的过程并没有区别;
2、如果用户不断的重新获取图片的话,必须把现在的bmp内存释放,否则会报错! bmp.recycle()。
复制代码 代码如下:

protected void onactivityresult(int requestcode, int resultcode, intent data) {
super.onactivityresult(requestcode, resultcode, data);
if(resultcode == result_ok){
//选择图片
uri uri = data.getdata();
contentresolver cr = this.getcontentresolver();
try {
if(bmp != null)//如果不释放的话,不断取图片,将会内存不够
bmp.recycle();
bmp = bitmapfactory.decodestream(cr.openinputstream(uri));
} catch (filenotfoundexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
system.out.println("the bmp tostring: " + bmp);
imagesv.setbmp(bmp);
}else{
toast.maketext(setimageactivity.this, "请重新选择图片", toast.length_short).show();
}
}

处理图片,方法二,获得图片的地址再处理
复制代码 代码如下:

protected void onactivityresult(int requestcode, int resultcode, intent data) {
super.onactivityresult(requestcode, resultcode, data);
if(resultcode == result_ok){
uri uri = data.getdata();
string [] proj={mediastore.images.media.data};
cursor cursor = managedquery( uri,
proj, // which columns to return
null, // where clause; which rows to return (all rows)
null, // where clause selection arguments (none)
null); // order-by clause (ascending by name)
int column_index = cursor.getcolumnindexorthrow(mediastore.images.media.data);
cursor.movetofirst();
string path = cursor.getstring(column_index);
bmp = bitmapfactory.decodefile(path);
system.out.println("the path is :" + path);
}else{
toast.maketext(setimageactivity.this, "请重新选择图片", toast.length_short).show();
}
}