android实现拍照,并将图片保存到SD下

本来是想实现拍照后将图片上传到服务器的,可是关于上传这部分还未实现,只实现了拍照

1         private File cache;//缓存路径,拍照后图片的保存路径
2         
3         //SD卡
4         cache=new File(Environment.getExternalStorageDirectory().getAbsolutePath(),"techat/userImg/");
5         if(!cache.exists()){
6             cache.mkdirs();
7         }

SD的路径,如果不存在则自动创建文件夹

1         //SD卡
2         cache=new File(Environment.getExternalStorageDirectory().getAbsolutePath(),"techat/userImg/");
3         if(!cache.exists()){
4             cache.mkdirs();
5         }

调用系统的拍照功能

 1 //拍照
 2     class dogetphoto implements OnClickListener{
 3         @Override
 4         public void onClick(View v) {
 5 
 6             Intent in=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 7             if(cache!=null){
 8                 in.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(cache,"u.png")));
 9             }else{
10                 Toast.makeText(RegisterActivity.this, "SD卡不存在", Toast.LENGTH_SHORT).show();
11             }
12             startActivityForResult(in, 1);
13         }
14     }

拍照的回调事件

 1 //拍照回调方法
 2     @Override
 3     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 4         if(requestCode==1){
 5             if(resultCode==Activity.RESULT_OK){
 6                 if(cache!=null){
 7                     System.out.println("图片的路径是=======>>>>>"+cache);
 8                     getImage(cache+"/u.png");
 9                 }else{
10                     Bundle bun=data.getExtras();
11                     bitmap=(Bitmap)bun.get("data");
12                     img.setImageBitmap(bitmap);
13                 }
14             }
15         }
16         super.onActivityResult(requestCode, resultCode, data);
17     }

获取sd卡下的图片并将图片显示在ImageView上

 1     Bitmap bitmap;
 2     int maxH=100;
 3     
 4     //获取用户头像
 5     public void getImage(String imgPath){
 6         
 7         System.out.println("图片的路径是===============》》》》》》"+imgPath);
 8         BitmapFactory.Options options=new BitmapFactory.Options();
 9         options.inJustDecodeBounds=true;
10         //获取这个图片的高度、和宽度
11         bitmap=BitmapFactory.decodeFile(imgPath,options);
12         //计算缩放比例
13         int be=(int)options.outHeight%maxH;
14         int ys=options.outHeight%maxH;//求余数
15         float fe=ys/(float)maxH;
16         if(fe>=0.5)be=be+1;
17         if(be<=0)
18             be=1;
19         options.inSampleSize=be;
20         
21         //重新读入图片
22         options.inJustDecodeBounds=false;
23         bitmap=BitmapFactory.decodeFile(imgPath,options);
24         
25         Bitmap bb=getRoundCornerImage(bitmap);
26         
27         img.setImageBitmap(bb);    
28     }     
29     

由于项目需要,所以我把图片做成圆形了,也就是画布重绘图片,只是显示的是圆形,而sd下面的图片还是拍照时的图片,并未改变原图

 1  // 圆角的处理
 2     private static Bitmap getRoundCornerImage(Bitmap bitmap) {
 3 
 4         Bitmap oldBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);// 创建一个原图
 5         Canvas canvas = new Canvas(oldBitmap);// 创建带有位图roundConcerImage的画布
 6 
 7         Paint paint = new Paint();// 创建画笔
 8         Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());// 创建一个和原始图片一样大小的矩形
 9         RectF rectf = new RectF(rect);
10         paint.setAntiAlias(true);// 去锯齿
11         paint.setFilterBitmap(true);
12         paint.setDither(true);
13         
14         canvas.drawARGB(0, 0, 0, 0);
15         canvas.drawRoundRect(rectf, 50, 50, paint);// 画一个和原始图片一样大小的圆角矩形
16 
17         paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); // 设置相交模式
18        
19        // canvas.drawCircle(oldBitmap.getWidth() / 2 + 0.5f,oldBitmap.getHeight()/2 + 0.5f, oldBitmap.getWidth() / 2 + 0.2f,paint); 
20         
21         canvas.drawBitmap(bitmap, rect, rect, paint); // 把图片画到矩形去
22         return oldBitmap; 
23     }

至于将上传后的图片上传到服务器中,现在还没有实现.......

 

posted @ 2013-12-06 19:48  小小缘  阅读(1109)  评论(0编辑  收藏  举报