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 }
至于将上传后的图片上传到服务器中,现在还没有实现.......
经验的积累在于平时的点滴、