1. 从相册选择照片进行裁剪
从相册选择照片并裁剪:
/**
* 从相册选择照片进行裁剪
*/
private void cropfromgallery() {
// todo auto-generated method stub
intent intent=new intent();
intent.setaction(intent.action_pick);//pick an item from the data
intent.settype("image/*");//从所有图片中进行选择
intent.putextra("crop", "true");//设置为裁切
intent.putextra("aspectx", 1);//裁切的宽比例
intent.putextra("aspecty", 1);//裁切的高比例
intent.putextra("outputx", 600);//裁切的宽度
intent.putextra("outputy", 600);//裁切的高度
intent.putextra("scale", true);//支持缩放
intent.putextra("return-data", false);
intent.putextra(mediastore.extra_output, imageuri);//将裁切的结果输出到指定的uri
intent.putextra("outputformat", bitmap.compressformat.jpeg.tostring());//裁切成的图片的格式
intent.putextra("nofacedetection", true); // no face detection
startactivityforresult(intent, select_pic);
}
将裁减好的照片显示在显示在imagaview上:
case select_pic:
if (resultcode==result_ok) {
try {
bitmap bitmap=bitmapfactory.decodestream(getcontentresolver().
openinputstream(imageuri));//将imageuri对象的图片加载到内存
imgshow.setimagebitmap(bitmap);
} catch (filenotfoundexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
}
break;
程序运行效果图:
2. 从相机拍取照片进行裁剪
控制相机拍照并将照片保存到指定位置:
/**
* 从相机拍取照片进行裁剪
*/
private void cropfromtake() {
// todo auto-generated method stub
intent intent=new intent();
intent.setaction(mediastore.action_image_capture);//设置action为拍照
intent.putextra(mediastore.extra_output, imageuri);//将拍取的照片保存到指定uri
startactivityforresult(intent, take_pic);
}
裁剪已经排好的照片并显示在imageview上:
case take_pic:
if (resultcode==result_ok) {
cropimageuri(imageuri, 600, 600, crop_pic);
}
break;
/**
* 裁剪指定uri对应的照片
* @param imageuri:uri对应的照片
* @param outputx:裁剪宽
* @param outputy:裁剪高
* @param requestcode:请求码
*/
private void cropimageuri(uri imageuri, int outputx, int outputy, int requestcode){
intent intent = new intent("com.android.camera.action.crop");
intent.setdataandtype(imageuri, "image/*");
intent.putextra("crop", "true");
intent.putextra("aspectx", 1);
intent.putextra("aspecty", 1);
intent.putextra("outputx", outputx);
intent.putextra("outputy", outputy);
intent.putextra("scale", true);
intent.putextra(mediastore.extra_output, imageuri);
intent.putextra("return-data", false);
intent.putextra("outputformat", bitmap.compressformat.jpeg.tostring());
intent.putextra("nofacedetection", true); // no face detection
startactivityforresult(intent, requestcode);
}
程序运行效果图:
3.完整项目代码:
package com.jph.cp; import java.io.file; import java.io.filenotfoundexception; import android.support.v7.app.actionbaractivity; import android.content.intent; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.net.uri; import android.os.bundle; import android.os.environment; import android.provider.mediastore; import android.view.view; import android.widget.imageview; /** * 从相册选择照片进行裁剪,从相机拍取照片进行裁剪 * @author jph * date:2014.10.09 */ public class mainactivity extends actionbaractivity { private final static int select_pic=0x123; private final static int take_pic=0x124; private final static int crop_pic=0x125; private uri imageuri; private imageview imgshow; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); //初始化imageuri imageuri=uri.fromfile(new file(environment.getexternalstoragedirectory(), "test.jpg")); imgshow=(imageview)findviewbyid(r.id.imgshow); } @override protected void onactivityresult(int requestcode, int resultcode, intent data) { // todo auto-generated method stub switch (requestcode) { case select_pic: if (resultcode==result_ok) { try { bitmap bitmap=bitmapfactory.decodestream(getcontentresolver(). openinputstream(imageuri));//将imageuri对象的图片加载到内存 imgshow.setimagebitmap(bitmap); } catch (filenotfoundexception e) { // todo auto-generated catch block e.printstacktrace(); } } break; case take_pic: if (resultcode==result_ok) { cropimageuri(imageuri, 600, 600, crop_pic); } break; case crop_pic: if (resultcode==result_ok) { try { bitmap bitmap=bitmapfactory.decodestream(getcontentresolver(). openinputstream(imageuri));//将imageuri对象的图片加载到内存 imgshow.setimagebitmap(bitmap); } catch (filenotfoundexception e) { // todo auto-generated catch block e.printstacktrace(); } } break; default: break; } super.onactivityresult(requestcode, resultcode, data); } /** * 裁剪指定uri对应的照片 * @param imageuri:uri对应的照片 * @param outputx:裁剪宽 * @param outputy:裁剪高 * @param requestcode:请求码 */ private void cropimageuri(uri imageuri, int outputx, int outputy, int requestcode){ intent intent = new intent("com.android.camera.action.crop"); intent.setdataandtype(imageuri, "image/*"); intent.putextra("crop", "true"); intent.putextra("aspectx", 1); intent.putextra("aspecty", 1); intent.putextra("outputx", outputx); intent.putextra("outputy", outputy); intent.putextra("scale", true); intent.putextra(mediastore.extra_output, imageuri); intent.putextra("return-data", false); intent.putextra("outputformat", bitmap.compressformat.jpeg.tostring()); intent.putextra("nofacedetection", true); // no face detection startactivityforresult(intent, requestcode); } public void croppic(view view) { switch (view.getid()) { case r.id.btncropfromgallery://从相册选择照片进行裁剪 cropfromgallery(); break; case r.id.btncropfromtake://从相机拍取照片进行裁剪 cropfromtake(); break; default: break; } } /** * 从相机拍取照片进行裁剪 */ private void cropfromtake() { // todo auto-generated method stub intent intent=new intent(); intent.setaction(mediastore.action_image_capture);//设置action为拍照 intent.putextra(mediastore.extra_output, imageuri);//将拍取的照片保存到指定uri startactivityforresult(intent, take_pic); } /** * 从相册选择照片进行裁剪 */ private void cropfromgallery() { // todo auto-generated method stub intent intent=new intent(); intent.setaction(intent.action_pick);//pick an item from the data intent.settype("image/*");//从所有图片中进行选择 intent.putextra("crop", "true");//设置为裁切 intent.putextra("aspectx", 1);//裁切的宽比例 intent.putextra("aspecty", 1);//裁切的高比例 intent.putextra("outputx", 600);//裁切的宽度 intent.putextra("outputy", 600);//裁切的高度 intent.putextra("scale", true);//支持缩放 intent.putextra("return-data", false); intent.putextra(mediastore.extra_output, imageuri);//将裁切的结果输出到指定的uri intent.putextra("outputformat", bitmap.compressformat.jpeg.tostring());//裁切成的图片的格式 intent.putextra("nofacedetection", true); // no face detection startactivityforresult(intent, select_pic); } }
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。