Android扩展 - 拍照篇(Camera)

时间:2021-09-29 23:20:20

1.调用系统摄像头

1.声明常量和变量

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

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

4.生成文件名返回路径

5.保存图片

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

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

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

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

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

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