Android编程实现调用系统图库与裁剪图片功能
本文实例讲述了android编程实现调用系统图库与裁剪图片功能。分享给大家供大家参考,具体如下:
在android开发中,调用系统图库和裁剪照片是很常见的需求。相对于自己实现这种功能,直接调用系统具有诸多优点,如不用考虑屏幕适配,不用担心性能问题,等等。因此,对于一般的需求,建议直接调用系统的功能,简便高效!
首先上效果图:
一、只调用系统图库(不裁剪),返回用户选择的图片。(只支持单选,如需多选则需要自己实现,可参考android编程实现仿qq照片选择器(按相册分类显示,多选添加)源码。)
1.跳转至系统图库页面:
intent i = new intent(intent.action_pick, mediastore.images.media.external_content_uri); startactivityforresult(i, select_image);
2.在onactivityresult中接收系统图库返回的信息(也就是用户选择的照片)。
@override protected void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); if (resultcode != result_ok || data == null) { return; } //select an image if (requestcode == select_image) { //get image path from uri string imagepath = getimagepath(data.getdata()); return; } } private string getimagepath(uri selectedimage) { string[] filepathcolumn = {mediastore.images.media.data}; cursor cursor = getcontentresolver().query(selectedimage, filepathcolumn, null, null, null); cursor.movetofirst(); int columnindex = cursor.getcolumnindex(filepathcolumn[0]); string imagepath = cursor.getstring(columnindex); cursor.close(); system.out.println("image path:" + imagepath); return imagepath; }
二、跳转至系统图库,选择照片,并裁剪。
1.跳转至系统图库:
//select image via system gallery, crop and save the new image file. public void selectimageandcrop(view view) { //after cropping, the image file will be stored here! cachefile = imagecachefolder + file.separator + "cache_" + system.currenttimemillis() + ".jpg"; intent intent = new intent(intent.action_get_content); intent.settype("image/*"); intent.putextra("crop", "true"); //width:height intent.putextra("aspectx", 1); intent.putextra("aspecty", 1); intent.putextra("output", uri.fromfile(new file(cachefile))); intent.putextra("outputformat", "jpeg"); startactivityforresult(intent.createchooser(intent, "choose image"), select_image_crop); }
跳转之前需要传递的数据:
(1)crop:传递一个true,告诉系统需要裁剪。
(2)aspectx和aspecty:裁剪框的宽高比。
(3)output:需要传递一个由文件路径cachefile构建的uri,用户在图库页面选择照片之后会自动进入裁剪页面,裁剪之后图片会被保存在cachefile这个位置。
裁剪完成之后,同样会回调onactivityresult方法(resultcode为result_ok),并且图片会被保存在cachefile这个位置,因此可以直接使用这个文件,例如将其设置为imageview的资源。
@override protected void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); if (resultcode != result_ok) { return; } //select an image and crop if (requestcode == select_image_crop) { //compress the original image to save memory. bitmapfactory.options opt = new bitmapfactory.options(); opt.insamplesize = 4; imageview.setimagebitmap(bitmapfactory.decodefile(cachefile, opt)); } }
更多关于android相关内容感兴趣的读者可查看本站专题:《android图形与图像处理技巧总结》、《android开发入门与进阶教程》、《android调试技巧与常见问题解决方法汇总》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。