android 剪切照片/相册,不依赖厂商API方案
来源:互联网 发布:iphone5s软件下载 编辑:程序博客网 时间:2024/05/08 04:20
1. 引入 cropImage 工程
csdn内下载地址:http://download.csdn.net/detail/qhexin/7016925
也可以到这里下载: https://github.com/lvillani/android-cropimage
2. 加入代码
public static Bitmap getPicFromBytes(byte[] bytes, BitmapFactory.Options opts) { if (bytes != null) if (opts != null) return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,opts); else { return BitmapFactory.decodeByteArray(bytes, 0, bytes.length , null); } return null; } public static byte[] readStream(InputStream inStream) throws Exception { byte[] buffer = new byte[1024]; int len = -1; ByteArrayOutputStream outStream = new ByteArrayOutputStream(); while ((len = inStream.read(buffer)) != -1) { outStream.write(buffer, 0, len); } byte[] data = outStream.toByteArray(); outStream.close(); inStream.close(); return data; } public boolean saveBitmap(Bitmap bitmap,String url) throws IOException, NumberFormatException, JSONException { File file = new File(url); FileOutputStream out; try{ int bitMapWidth = bitmap.getWidth(); int bitMapHeight = bitmap.getHeight(); int wantWidth = Integer.valueOf(m_imagePickerJson.getString("want_width")); int wantHeight = Integer.valueOf(m_imagePickerJson.getString("want_height")); Log.d("sss","Majiang bitMapWidth="+bitMapWidth + " bitMapHeight=" + bitMapHeight + " wantWidth=" + wantWidth + " wantHeight="+wantHeight ); if(wantWidth == 0) { wantWidth = bitMapWidth; wantHeight = bitMapHeight; } Bitmap bitmapCutPart = null;//切割部分 Matrix matrix=new Matrix(); if(bitMapWidth*1.0/bitMapHeight > wantWidth*1.0/wantHeight ) { int theWidthCut = (int)(wantWidth*1.0/wantHeight * bitMapHeight); matrix.postScale(wantHeight*1.0f/bitMapHeight,wantHeight*1.0f/bitMapHeight); Log.d("sss","Majiang 1111111 theWidthCut="+theWidthCut ); bitmapCutPart = Bitmap.createBitmap(bitmap , (int)(bitMapWidth/2.0f-theWidthCut/2.0f) , 0 , theWidthCut , bitMapHeight,matrix,true ); } else { matrix.postScale(wantWidth*1.0f/bitMapWidth,wantWidth*1.0f/bitMapWidth); int theHeightCut = (int)(bitMapWidth*1.0 / (wantWidth*1.0/wantHeight)); Log.d("sss","Majiang 22222 theHeightCut="+theHeightCut ); bitmapCutPart = Bitmap.createBitmap(bitmap , 0 , (int)(bitMapHeight/2- theHeightCut/2), bitMapWidth , theHeightCut,matrix,true ); } out = new FileOutputStream(file); if(bitmapCutPart.compress(Bitmap.CompressFormat.JPEG, 70, out)) { out.flush(); out.close(); } bitmapCutPart.recycle(); bitmapCutPart = null; return true; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return false; } public void Local_Choose_File_Start(JSONObject prms) {m_imagePickerJson = prms;final CharSequence[] items = { "相册", "拍照" };AlertDialog dlg = new AlertDialog.Builder(this).setTitle("选择图片").setItems(items,new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int item) {//这里item是根据选择的方式,在items数组里面定义了两种方式,拍照的下标为95166所以就调用拍照方法if(item==1){ //Intent getImageByCamera= new Intent("android.media.action.IMAGE_CAPTURE"); UrimImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "tmp_contact_" + ".jpg")); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if(mImageCaptureUri != null){intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,mImageCaptureUri);} intent.putExtra("return-data", true); startActivityForResult(intent, 95166); }else{Intent getImage = new Intent(Intent.ACTION_GET_CONTENT); getImage.addCategory(Intent.CATEGORY_OPENABLE); getImage.setType("image/jpeg"); startActivityForResult(getImage, 95165); }}}).create();dlg.setOnCancelListener(new OnCancelListener(){@Overridepublic void onCancel(DialogInterface arg0) {// TODO Auto-generated method stubLog.d("on cancel listener", "on cancel listernner");try {m_imagePickerJson.put("error", "1");} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}AndroidNDKHelper.SendMessageWithParameters("Local_Choose_File_Result", m_imagePickerJson);m_imagePickerJson = null;}});dlg.show();} @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if(m_imagePickerJson != null && (requestCode == Activity_Tag_ChoosePhoto|| requestCode == Activity_Tag_TakePhoto || requestCode == Activity_Tag_CropPhoto )){if(resultCode != Activity.RESULT_OK ){try {m_imagePickerJson.put("error", "1");} catch (Exception e1) {e1.printStackTrace();}AndroidNDKHelper.SendMessageWithParameters("Local_Choose_File_Result", m_imagePickerJson);m_imagePickerJson = null;return;}//选图Bitmap myBitmap = null;byte[] mContent;ContentResolver resolver = getContentResolver(); String fileTempSave = "";try {fileTempSave = m_imagePickerJson.getString("temp_save_image_path");} catch (Exception e) {e.printStackTrace();}if(requestCode ==Activity_Tag_TakePhoto ){ Uri mImageCaptureUri = Uri.fromFile(new File(fileTempSave)); Uri moriginUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "tmp_contact_" + ".jpg")); CropImageIntentBuilder cropImage = new CropImageIntentBuilder(512, 512, mImageCaptureUri); cropImage.setSourceImage(moriginUri); startActivityForResult(cropImage.getIntent(this) , Activity_Tag_CropPhoto); //startActivity(cropImage.getIntent(this) );return;}else if( requestCode == Activity_Tag_ChoosePhoto){Uri mImageCaptureUri = Uri.fromFile(new File(fileTempSave)); CropImageIntentBuilder cropImage = new CropImageIntentBuilder(512, 512, mImageCaptureUri); cropImage.setSourceImage(data.getData()); startActivityForResult(cropImage.getIntent(this) , Activity_Tag_CropPhoto); return;}else if (requestCode == Activity_Tag_ChoosePhoto) { try { //获得图片的uri Bundle bdl = data.getExtras(); Uri originalUri = data.getData(); if(originalUri != null) { //将图片内容解析成字节数组 mContent=readStream(resolver.openInputStream(Uri.parse(originalUri.toString()))); BitmapFactory.Options options = new BitmapFactory.Options(); //将字节数组转换为ImageView可调用的Bitmap对象 myBitmap = getPicFromBytes(mContent, null); ////把得到的图片绑定在控件上显示 //imageView.setImageBitmap(myBitmap); this.saveBitmap(myBitmap, fileTempSave);//保存为临时文件 myBitmap.recycle(); myBitmap = null; m_imagePickerJson.put("success", "1"); } else { m_imagePickerJson.put("error", "1"); } } catch (Exception e) { try {m_imagePickerJson.put("error", "1");} catch (Exception e1) {e1.printStackTrace();} System.out.println(e.getMessage()); } }else if(requestCode ==Activity_Tag_TakePhoto){ try { String sdStatus = Environment.getExternalStorageState(); if(sdStatus.equals(Environment.MEDIA_MOUNTED)) { try { try { Uri mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "tmp_contact_" + ".jpg")); // 将图片内容解析成字节数组 mContent = readStream(resolver.openInputStream(Uri.parse(mImageCaptureUri.toString()))); // 将字节数组转换为ImageView可调用的Bitmap对象 myBitmap = getPicFromBytes(mContent, null); //把得到的图片绑定在控件上显示 this.saveBitmap(myBitmap, fileTempSave);//保存为临时文件 myBitmap.recycle(); myBitmap = null; mContent = null; } catch (FileNotFoundException e) { e.printStackTrace(); } } catch (Exception e) { } } else { //读出来的缩略图 Bundle extras = data.getExtras(); myBitmap = (Bitmap) extras.get("data");//把得到的图片绑定在控件上显示//imageView.setImageBitmap(myBitmap);this.saveBitmap(myBitmap, fileTempSave);//保存为临时文件myBitmap.recycle(); myBitmap = null; } m_imagePickerJson.put("success", "1");} catch (Exception e) {try {m_imagePickerJson.put("error", "1");} catch (Exception e1) {e1.printStackTrace();}e.printStackTrace();} } else if(requestCode == Activity_Tag_CropPhoto ) { try { //获得图片的uri // Bundle bdl = data.getExtras();// Uri originalUri = data.getData(); // Uri mImageCaptureUri = Uri.fromFile(new File(fileTempSave));// // if(originalUri != null)// { // //将图片内容解析成字节数组 // mContent=readStream(resolver.openInputStream(Uri.parse(originalUri.toString())));// // BitmapFactory.Options options = new BitmapFactory.Options();// // //将字节数组转换为ImageView可调用的Bitmap对象 // myBitmap = getPicFromBytes(mContent, null); // ////把得到的图片绑定在控件上显示// //imageView.setImageBitmap(myBitmap);// this.saveBitmap(myBitmap, fileTempSave);//保存为临时文件 // myBitmap.recycle();// myBitmap = null;// // m_imagePickerJson.put("success", "1");// }// else// { // m_imagePickerJson.put("error", "1");// }// m_imagePickerJson.put("success", "1"); } catch (Exception e) { try {m_imagePickerJson.put("error", "1");} catch (Exception e1) {e1.printStackTrace();} System.out.println(e.getMessage()); } AndroidNDKHelper.SendMessageWithParameters("Local_Choose_File_Result", m_imagePickerJson);m_imagePickerJson = null; }return;}if (mBalinShareManager != null) {mBalinShareManager = new BalinShareManager(this);}mBalinShareManager.addSSO(requestCode, resultCode, data);}
0 0
- android 剪切照片/相册,不依赖厂商API方案
- android 相机、相册、剪切
- Android——拍照、剪切、得到图片/从相册中选择照片(api19以上和以下有区别)
- android读取相册照片和相机照片
- android 拍照和选择相册图片剪切
- Android中调到相册剪切图片
- android 调用系统相机、相册剪切功能
- android 从相机或者相册获取照片!
- android照相机上传照片和相册
- Android 获取本地相册照片信息
- Android开发之从相册选择照片
- android 从相册截照片使用
- android 选择照片(相册/拍照/切图)
- Android 从相册中选择照片
- Android拍照或相册获取照片上传
- Android仿qq从相册选择照片
- Android 从相册选择照片 手机拍照
- Android 打开相册选择 照片、音频、视频
- 算法概论第一次作业
- 用Gvim建立IDE编程环境 (Windows篇)
- Git学习系列(六)解决分支冲突及分支管理策略
- Spine 骨骼动画 编辑器 官方文档
- cocos2d-x 源码剖析(3)
- android 剪切照片/相册,不依赖厂商API方案
- Linux 下监控程序升级版
- checkio (How much gold)
- cocos2d-x 源码剖析(4)
- 日期相差的天数 秒数
- 【翻译】两种高性能I/O设计模式(Reactor/Proactor)的比较
- 万众瞩目,传智播客武汉校区一期0306java基础班开班啦!
- 新电脑+旧系统:教你在不同机器间转移Linux
- Cocos2d-x学习记录 -- Java调用C++方法