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
原创粉丝点击