当前位置:   article > 正文

androidの调用系统相机拍照_android调用系统相机进行拍照

android调用系统相机进行拍照

androidの调用系统相机拍照

1. 通过Intent直接调用系统相机

    1. 直接调用系统的相机应用,只需要在Intent对象中传入相应的参数即可

         MediaStore.ACTION_IMAGE_CAPTURE   拍照
         MediaStore.ACTION_VIDEO_CAPTURE    录像

    2. 使用startActivityForResult()方法,并传入上面的intent对象, 之后,

        系统自带的相机应用就会启动,用户就可以用它来拍照或者录像。

    3. 用onActivityResult()接收传回的图像,

        当用户拍完照片或者录像,或者取消后,系统都会调用这个函数。

2.  源码分析

  1. package com.wyl.example;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Date;
  6. import android.app.Activity;
  7. import android.content.Intent;
  8. import android.graphics.Bitmap;
  9. import android.graphics.Bitmap.CompressFormat;
  10. import android.graphics.Matrix;
  11. import android.os.Bundle;
  12. import android.os.Environment;
  13. import android.provider.MediaStore;
  14. import android.view.View;
  15. import android.view.View.OnClickListener;
  16. import android.widget.Button;
  17. import android.widget.ImageView;
  18. //定义了本实例的主要Activity
  19. public class MainActivity extends Activity {
  20. private static final int RESULT_CAPTURE_IMAGE = 1;// 照相的requestCode
  21. private String strImgPath = "";// 照片文件绝对路径
  22. // 定义拍照的按钮
  23. private Button btnTakePhoto;
  24. // 定义预览图片的imageview
  25. private ImageView ivSurface;
  26. //保存的拍照文件
  27. private File out;
  28. @Override
  29. public void onCreate(Bundle savedInstanceState) {
  30. super.onCreate(savedInstanceState);
  31. setContentView(R.layout.activity_main);
  32. // 得到布局中的所有对象
  33. findView();
  34. // 设置对象的监听器
  35. setListener();
  36. }
  37. private void findView() {
  38. // 得到布局中的所有对象
  39. btnTakePhoto = (Button) findViewById(R.id.btn_takephoto);
  40. ivSurface = (ImageView) findViewById(R.id.iv_image);
  41. }
  42. // 设置对象的监听器
  43. private void setListener() {
  44. btnTakePhoto.setOnClickListener(listener);
  45. }
  46. OnClickListener listener = new OnClickListener() {
  47. @Override
  48. public void onClick(View v) {
  49. // TODO Auto-generated method stub
  50. switch (v.getId()) {
  51. // 拍照的按钮
  52. case R.id.btn_takephoto:
  53. cameraMethod();
  54. break;
  55. }
  56. }
  57. };
  58. //照相功能
  59. private void cameraMethod() {
  60. // 实例化拍照的Intent
  61. Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  62. // 设置图片存放的路径,Environment.getExternalStorageDirectory()得到SD卡的根目录
  63. strImgPath = Environment.getExternalStorageDirectory().toString()
  64. + "/CONSDCGMPIC/";// 存放照片的文件夹
  65. // 给相片命名
  66. String fileName = new SimpleDateFormat("yyyyMMddHHmmss")
  67. .format(new Date()) + ".jpg";// 照片命名
  68. // 检查存放的路径是否存在,如果不存在则创建目录
  69. out = new File(strImgPath);
  70. if (!out.exists()) {
  71. out.mkdirs();
  72. }
  73. // 在此目录下创建文件
  74. out = new File(strImgPath, fileName);
  75. // 该照片的绝对路径
  76. strImgPath = strImgPath + fileName;
  77. // 启动ACITIVITY
  78. startActivityForResult(imageCaptureIntent, RESULT_CAPTURE_IMAGE);
  79. }
  80. @Override
  81. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  82. super.onActivityResult(requestCode, resultCode, data);
  83. switch (requestCode) {
  84. case RESULT_CAPTURE_IMAGE:// 拍照
  85. // 如果返回为正确的的结果
  86. if (resultCode == RESULT_OK) {
  87. // intent.getExtras()得到intent所附带的额外数据,在这也就是拍摄的图片
  88. Bundle extras = data.getExtras();
  89. // 得到额外的数据的data字段,转化为bitmap类型
  90. Bitmap b = (Bitmap) extras.get("data");
  91. // 实例化矩阵Matrix
  92. Matrix matrix = new Matrix();
  93. // 设置缩放
  94. matrix.postScale(5f, 4f);
  95. // 创建bitmap对象,并设置bitmap的参数
  96. b = Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(),
  97. matrix, true);
  98. // 设置imageview的图片资源
  99. ivSurface.setImageBitmap(b);
  100. try {
  101. // 把文件转化为outputstream
  102. FileOutputStream outStream = new FileOutputStream(out);
  103. // 把bitmap数据写入字符流中
  104. b.compress(CompressFormat.JPEG, 100, outStream);
  105. // 关闭字符流
  106. outStream.close();
  107. } catch (Exception e) {
  108. e.printStackTrace();
  109. }
  110. }
  111. break;
  112. }
  113. }
  114. }


 3. 效果图



4. 源码下载


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/175316
推荐阅读
相关标签
  

闽ICP备14008679号