androidの调用系统相机拍照

androidの调用系统相机拍照

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

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

         MediaStore.ACTION_IMAGE_CAPTURE   拍照
         MediaStore.ACTION_VIDEO_CAPTURE    录像

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

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

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

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

2.  源码分析

package com.wyl.example;

import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Matrix;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

//定义了本实例的主要Activity
public class MainActivity extends Activity {
	private static final int RESULT_CAPTURE_IMAGE = 1;// 照相的requestCode
	private String strImgPath = "";// 照片文件绝对路径
	// 定义拍照的按钮
	private Button btnTakePhoto;
	// 定义预览图片的imageview
	private ImageView ivSurface;
	//保存的拍照文件
	private File out;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 得到布局中的所有对象
		findView();
		// 设置对象的监听器
		setListener();
	}

	private void findView() {
		// 得到布局中的所有对象
		btnTakePhoto = (Button) findViewById(R.id.btn_takephoto);
		ivSurface = (ImageView) findViewById(R.id.iv_image);
	}

	// 设置对象的监听器
	private void setListener() {
		btnTakePhoto.setOnClickListener(listener);
	}

	OnClickListener listener = new OnClickListener() {
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			switch (v.getId()) {
			// 拍照的按钮
			case R.id.btn_takephoto:
				cameraMethod();
				break;
			}
		}
	};

	//照相功能
	private void cameraMethod() {
		// 实例化拍照的Intent
		Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
		// 设置图片存放的路径,Environment.getExternalStorageDirectory()得到SD卡的根目录
		strImgPath = Environment.getExternalStorageDirectory().toString()
				+ "/CONSDCGMPIC/";// 存放照片的文件夹
		// 给相片命名
		String fileName = new SimpleDateFormat("yyyyMMddHHmmss")
				.format(new Date()) + ".jpg";// 照片命名
		// 检查存放的路径是否存在,如果不存在则创建目录
		out = new File(strImgPath);
		if (!out.exists()) {
			out.mkdirs();
		}
		// 在此目录下创建文件
		out = new File(strImgPath, fileName);
		// 该照片的绝对路径
		strImgPath = strImgPath + fileName;
		// 启动ACITIVITY
		startActivityForResult(imageCaptureIntent, RESULT_CAPTURE_IMAGE);
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		switch (requestCode) {
		case RESULT_CAPTURE_IMAGE:// 拍照
			// 如果返回为正确的的结果
			if (resultCode == RESULT_OK) {
				// intent.getExtras()得到intent所附带的额外数据,在这也就是拍摄的图片
				Bundle extras = data.getExtras();
				// 得到额外的数据的data字段,转化为bitmap类型
				Bitmap b = (Bitmap) extras.get("data");
				// 实例化矩阵Matrix
				Matrix matrix = new Matrix();
				// 设置缩放
				matrix.postScale(5f, 4f);
				// 创建bitmap对象,并设置bitmap的参数
				b = Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(),
						matrix, true);
				// 设置imageview的图片资源
				ivSurface.setImageBitmap(b);
				try {
					// 把文件转化为outputstream
					FileOutputStream outStream = new FileOutputStream(out);
					// 把bitmap数据写入字符流中
					b.compress(CompressFormat.JPEG, 100, outStream);
					// 关闭字符流
					outStream.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			break;
		}
	}
}


 3. 效果图



4. 源码下载


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值