首页 > 代码库 > Android扩展 - 拍照篇(Camera)

Android扩展 - 拍照篇(Camera)

1.调用系统摄像头

  1.声明常量和变量

  2.按钮点击事件,打开系统摄像头

  3.重写onActivityResult事件接收拍照返回

  4.生成文件名返回路径

  5.保存图片

 

[java] view plaincopy
 
  1. private static final int TAKE_PICTURE = 1;  
  2.   
  3. class btnGotoActivity02Listener implements OnClickListener {  
  4.   public void onClick(View v) {  
  5.     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //调用摄像头拍照  
  6.     startActivityForResult(intent, TAKE_PICTURE);  
  7.   }  
  8. }  
  9.   
  10. @Override  
  11. protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  12.   String filename = "";  
  13.   try {  
  14.     if (resultCode == Activity.RESULT_OK && requestCode == TAKE_PICTURE) {  
  15.       Bundle bundle = data.getExtras();  
  16.       Bitmap bmp = (Bitmap)bundle.get("data");  
  17.       filename = saveImage(bmp);  
  18.     }  
  19.   } catch (Exception err) {  
  20.     Log.e("Exception", err.getLocalizedMessage());  
  21.   }  
  22. }  
  23.   
  24. public String buildFileName(){  
  25.   Date now = new Date();  
  26.   SimpleDateFormat formater = new SimpleDateFormat("yyMMdd_HHmmss");  
  27.   
  28.   String SDCARD = Environment.getExternalStorageDirectory() + "/";  
  29.   String basePath = SDCARD + "dier/photo/";  
  30.   
  31.   File dir = new File(basePath);  
  32.   dir.mkdirs();  
  33.     
  34.   return basePath + formater.format(now) + ".jpg";  
  35. }  
  36.   
  37. public String saveImage(Bitmap bmp) throws Exception {  
  38.   File file = new File(buildFileName());  
  39.   file.createNewFile();  
  40.   FileOutputStream oStream = new FileOutputStream(file);  
  41.   bmp.compress(Bitmap.CompressFormat.JPEG, 100, oStream); //100是照片质量,0-100,越大越好  
  42.   oStream.flush();  
  43.   oStream.close();  
  44.   return file.getPath();  
  45. }  


 
2.保存完整分辨率的照片

  使用上面的方法,保存下来的图片仅为原图的1/4大小,如果需要保存大照片则需要使用下面的方式

  缺点:此方法除了在指定的目录下保存图片外,在系统拍照路径下也会保存下一张相同的图片。

[java] view plaincopy
 
    1. private static final int TAKE_PICTURE = 1;  
    2. private String TEMP_FILE = "";  
    3.   
    4. class btnGotoActivity02Listener implements OnClickListener {  
    5.   public void onClick(View v) {  
    6.     TEMP_FILE = buildFileName();  
    7.     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //调用摄像头拍照  
    8.     intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(TEMP_FILE))); //另存图片地址  
    9.     startActivityForResult(intent, TAKE_PICTURE);  
    10.   }  
    11. }  
    12.   
    13. public String buildFileName(){  
    14.   Date now = new Date();  
    15.   SimpleDateFormat formater = new SimpleDateFormat("yyMMdd_HHmmss");  
    16.   
    17.   String SDCARD = Environment.getExternalStorageDirectory() + "/";  
    18.   String basePath = SDCARD + "dier/photo/";  
    19.   
    20.   File dir = new File(basePath);  
    21.   dir.mkdirs();  
    22.     
    23.   return basePath + formater.format(now) + ".jpg";  
    24. }  
    25.   
    26. @Override  
    27. protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    28.   String filename = "";  
    29.   try {  
    30.     if (resultCode == Activity.RESULT_OK && requestCode == TAKE_PICTURE) {  
    31.       File file = new File(TEMP_FILE);  
    32.       if(file.exists()){  
    33.         filename = file.getPath();  
    34.         Toast.makeText(MainActivity.this, "图片已保存在:" + filename, 3000).show();  
    35.       }  
    36.       else {  
    37.         Toast.makeText(MainActivity.this, "亲,我实在无能为力啊,你是用啥程序照的相片?", 5000).show();  
    38.       }  
    39.     }  
    40.   } catch (Exception err) {  
    41.     Log.e("Exception", err.getLocalizedMessage());  
    42.   }  
    43. }  

http://blog.csdn.net/dier4836/article/details/7364721