Android拍照并保存(对图片进行压缩,分解)

来源:互联网 发布:js委托事件 编辑:程序博客网 时间:2024/04/28 04:24

转载:http://blog.csdn.net/gao_chun/article/details/40864121


具体功能:将拍摄的照片保存到SDcard中


具体需求:

1.图片名保存格式:图片名称_手机型号_随机4位数.jpg

2.将图片分解,压缩,显示

3.写入SDCard卡保存


具体实现:

1.定义布局文件

2.编写业务代码


这里只对调用相机拍照、图片显示、保存  做介绍   并提供源码下载


点击按钮后:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. @Override  
  2.     public void onClick(View v) {  
  3.         switch (v.getId()) {  
  4.             case R.id.btn_getphoto:  
  5.                 mPhotoName = mETphotoName.getEditableText().toString();  
  6.                 mModel = mETmodel.getEditableText().toString();  
  7.                 if(TextUtils.isEmpty(mPhotoName) || TextUtils.isEmpty(mModel)){  
  8.                     Toast.makeText(this,"请输入图片名称和型号",0).show();  
  9.                     return;  
  10.                 }  
  11.                 final String state = Environment.getExternalStorageState();  
  12.                 if (Environment.MEDIA_MOUNTED.equals(state)) {  
  13.                     final Intent takePictureImIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);  
  14.                     ContentValues values = new ContentValues();  
  15.                     mPhotoUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);  
  16.                     takePictureImIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mPhotoUri);  
  17.                     startActivityForResult(takePictureImIntent,REQUEST_CODE_TAKE_PICTURE);  
  18.                 } else {  
  19.                     Toast.makeText(this,"请检查内存卡"0).show();  
  20.                 }  
  21.                 break;  
  22.   
  23.             default:  
  24.                 break;  
  25.         }  
  26.   
  27.     }  


onActivityResult回调:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. /* (non-Javadoc) 
  2.      * @see android.app.Activity#onActivityResult(int, int, android.content.Intent) 
  3.      */  
  4.     @Override  
  5.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  6.         switch (requestCode) {  
  7.   
  8.             case REQUEST_CODE_TAKE_PICTURE:  
  9.                 // 通过照相获取图片  
  10.                 if (resultCode == Activity.RESULT_OK) {  
  11.                     final Uri uri = mPhotoUri;  
  12.                     Log.e("MainActivity",uri+"");  
  13.                     if (uri != null) {  
  14.                         processPicture(uri);  
  15.                     }  
  16.   
  17.                     //提示保存图片  
  18.                     AlertDialog.Builder builder = new AlertDialog.Builder(this);  
  19.                     builder.setTitle("提示");  
  20.                     builder.setMessage("是否需要保存图片?");  
  21.                     builder.setNegativeButton("取消"null);  
  22.                     builder.setPositiveButton("是的"new DialogInterface.OnClickListener() {  
  23.                         @Override  
  24.                         public void onClick(DialogInterface dialog, int which) {  
  25.                             String resetPhotoName = mPhotoName+"_"+mModel+"_"+Utils.getRandomString(4);  
  26.                             Utils.savePhotoToSDCard(bitmap,Utils.genProjectPath(),resetPhotoName);  
  27.                             Toast.makeText(MainActivity.this,"成功--->"+Utils.genProjectPath()+resetPhotoName,0).show();  
  28.   
  29.                             //清空文本框  
  30.                             mETphotoName.setText("");  
  31.                             mETmodel.setText("");  
  32.   
  33.                             dialog.cancel();  
  34.                         }  
  35.                     });  
  36.                     builder.show();  
  37.   
  38.                 }  
  39.                 break;  
  40.   
  41.             default:  
  42.                 super.onActivityResult(requestCode, resultCode, data);  
  43.                 break;  
  44.         }  
  45.     }  


图片显示:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. /** 
  2.      * 图片显示 
  3.      * @param uri 
  4.      */  
  5.     private void processPicture(Uri uri) {  
  6.         final String[] projection = {MediaStore.Images.Media.DATA};  
  7.         final Cursor cursor = managedQuery(uri, projection, nullnullnull);  
  8.         cursor.moveToFirst();  
  9.         final int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);  
  10.         String imagePath = cursor.getString(columnIndex);  
  11.         Log.e("MainActivity",imagePath);  
  12.   
  13.         final String targetPath = BitmapUtils.toRegularHashCode(imagePath) + ".jpg";  
  14.         BitmapUtils.compressBitmap(imagePath, targetPath, 640);  //压缩  
  15.         bitmap = BitmapUtils.decodeBitmap(imagePath, 150);       //分解  
  16.         mImage.setImageBitmap(bitmap);                           //显示  
  17.   
  18.         //上传服务器  
  19.         //final AvatarUrlUpdateRequest request = new AvatarUrlUpdateRequest(REQUEST_ID_AVATAR_URL_UPDATE,mFileName,targetPath,mLoginResult);  
  20.         //final LoginRequest request = new LoginRequest(0,"a@a.com","123456");  
  21.         //genericDataManager.retrieveData(request, this);  
  22.   
  23.     }  
源码下载地址:http://download.csdn.net/detail/gao_chun/8128717
0 0