调用摄像头拍照
来源:互联网 发布:花刺ip代理软件 编辑:程序博客网 时间:2024/06/04 23:23
调用摄像头的具体逻辑,如下所示:
public class MainActivity extends Activity {
public static final int TAKE_PHOTO = 1;
public static final int CROP_PHOTO = 2;
private Button takePhoto;
private ImageView picture;
private Uri imageUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
takePhoto = (Button) findViewById(R.id.take_photo);
picture = (ImageView) findViewById(R.id.picture);
takePhoto.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 创建File对象,用于存储拍照后的图片
File outputImage = new File(Environment.getExternalStorageDirectory(), "tempImage.jpg");
try {
if (outputImage.exists()) {
outputImage.delete();
}
outputImage.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
imageUri = Uri.fromFile(outputImage);
Intent intent = new Intent("android.media.action. IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, TAKE_PHOTO); // 启动相机程序
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case TAKE_PHOTO:
if (resultCode == RESULT_OK) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, CROP_PHOTO); // 启动裁剪程序
}
break;
case CROP_PHOTO:
if (resultCode == RESULT_OK) {
try {
Bitmap bitmap = BitmapFactory.decodeStream
(getContentResolver().openInputStream(imageUri));
picture.setImageBitmap(bitmap); // 将裁剪后的照片显示出来
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
break;
default:
break;
}
}
}
首先这里创建了一个 File 对象,用于存储摄像头拍下的图片,这里我们把图片命名为output_image.jpg , 并 将 它 存 放 在 手 机 SD 卡 的 根 目 录 下 , 调 用 Environment 的
getExternalStorageDirectory()方法获取到的就是手机 SD 卡的根目录。然后再调用 Uri 的fromFile()方法将 File 对象转换成 Uri 对象,这个 Uri 对象标识着 output_image.jpg 这张图片的唯一地址。接着构建出一个Intent对象,并将这个Intent的action指定为android.media.action.IMAGE_CAPTURE,再调用 Intent 的 putExtra()方法指定图片的输出地址,这里填入刚刚得到的 Uri 对象,最后调用 startActivityForResult()来启动活动。由于我们使用的是一个隐式Intent,系统会找出能够响应这个 Intent 的活动去启动,这样照相机程序就会被打开,拍下的照片将会输出到 output_image.jpg 中。注意刚才我们是使用 startActivityForResult()来启动活动的,因此拍完照后会有结果返回到 onActivityResult()方法中。如果发现拍照成功,则会再次构建出一个 Intent 对象,并把它的 action 指定为 com.android.camera.action.CROP。这个 Intent 是用于对拍出的照片进行裁剪的,因为摄像头拍出的照片都比较大,而我们可能只希望截取其中的一小部分。然后给这个Intent 设置上一些必要的属性,并再次调用 startActivityForResult()来启动裁剪程序。裁剪后
的照片同样会输出到 output_image.jpg 中。裁剪操作完成之后,程序又会回调到 onActivityResult()方法中,这个时候我们就可以调用 BitmapFactory 的 decodeStream()方法将 output_image.jpg 这张照片解析成 Bitmap 对象,然后把它设置到 ImageView 中显示出来。
还需要在 AndroidManifest.xml中声明权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
- iOS_调用摄像头拍照
- android 调用摄像头拍照
- IOS 调用摄像头拍照
- Android 调用摄像头拍照
- 调用摄像头拍照
- 调用摄像头拍照
- 调用摄像头拍照 camera
- unity调用摄像头拍照
- 调用摄像头拍照
- Android 调用摄像头拍照
- android: 调用摄像头拍照
- unity调用摄像头拍照
- 调用摄像头 拍照
- VB 调用摄像头拍照,保存。
- android调用手机摄像头拍照
- Chrome浏览器调用摄像头拍照
- Android 调用摄像头功能【拍照】
- OpenCv调用摄像头拍照代码
- Warning:com.alipay.android.phone.mrpc.core.AndroidHttpClient: can't find referenced method 'org.apac
- ScrollView与listview使用冲突最快捷使用解决方法
- 20161103关于需要同时登陆多个samba账号到服务器的问题(192.168.0.8) net use * /del /y
- 如何轻松在win和linux之间互传文件
- java执行Linux命令
- 调用摄像头拍照
- jquery中的表单序列化serialize()
- Okhttp框架的二次封装,post json格式的参数
- 转:我为什么写作——开博序言
- tomcat报错catalina.sh: line 401: /usr/java/jdk1.7.52/bin/java: No such file or directory
- javascript函数定义及参数
- Mysql5.6安装失败
- jquery的validate插件验证方式
- mysql的查询、子查询及连接查询