zoukankan      html  css  js  c++  java
  • 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     }

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

    经验的积累在于平时的点滴、
  • 相关阅读:
    POI Excel表格合并,边框设置
    MYSQL中group_concat有长度限制!默认1024(转载)
    MARQUEE 字符滚动条效果
    <A>标签电子邮件链接
    <A>标签锚标记
    <hr> 水平样式分隔线
    sudo gem install cocoapods 没反应问题
    适配iPhone6和iPhone6 Plus
    同步推是如何给未越狱的IOS设备安装任意IPA的?
    据说是百度ios面试题
  • 原文地址:https://www.cnblogs.com/yrhua/p/3462024.html
Copyright © 2011-2022 走看看