Android调用相机及使用图库截取图片
来源:互联网 发布:软件著作权变更登记 编辑:程序博客网 时间:2024/04/28 15:01
/* * @Copyright (c) tianchenglin * @Author TCL * @Date 2016.8.5 */package com.study.tcl.upload;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends AppCompatActivity { private static final int TAKE_PHOTO = 1; private static final int GALLARY = 2; private static final int CUT_PICTURE = 3; private int WIDTH = 1; private int HEIGHT = 1; private Intent intent; private Uri imageUri; private Button mBtnSelect; private AlertDialog mSelectDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { //选择图片来源按钮 mBtnSelect = (Button) findViewById(R.id.btn_select); //选择图片来源按钮的点击事件 mBtnSelect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showSelcetDialog(); } }); } /** * 显示选择图片对话框 */ private void showSelcetDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); View view = View.inflate(getApplicationContext(), R.layout.dialog_layout, null); builder.setView(view); mSelectDialog = builder.create(); mSelectDialog.show(); final TextView take_photo = (TextView) view.findViewById(R.id.take_photo); final TextView select_from_phone = (TextView) view.findViewById(R.id.select_from_phone); take_photo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //调用系统相机去拍摄照片 String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { Log.i("TestFile", "SD card is not avaiable/writeable right now."); return; } intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, TAKE_PHOTO); } }); select_from_phone.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { intent = new Intent(Intent.ACTION_GET_CONTENT, null); intent.setType("image/*"); startActivityForResult(intent, GALLARY); } }); } /** * 调用系统相机或图库返回的结果 * * @param requestCode * @param resultCode * @param data */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (data == null || resultCode != Activity.RESULT_OK) { return; } switch (requestCode) { case TAKE_PHOTO://拍照后返回的结果 Bundle bundle = data.getExtras(); //获取相机返回的数据,并转化为bitmap格式 Bitmap bitmap = (Bitmap) bundle.get("data"); if (bitmap == null) { return; }// String title = System.currentTimeMillis() + "";// //将图片保存到图库中// MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, title, null);// //更新图库// MediaScannerConnection.scanFile(this, new String[]{bitmap.getAbsolutePath()}, null, null); if (data.getData() != null) { imageUri = data.getData(); } else { //返回图库中图片URI imageUri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, null, null)); } //调用CropImage方法进行截取图片 toCropImage(imageUri, WIDTH, HEIGHT, 480, 320, CUT_PICTURE); break; case GALLARY://通过系统相册获取到图片并进行截取后的返回值 if (data.getData() != null) { toCropImage(data.getData(), WIDTH, HEIGHT, 480, 320, CUT_PICTURE); } break; case CUT_PICTURE://调用toCropImage方法截取图片后的返回值 //截取后的逻辑... Toast.makeText(MainActivity.this, "----", Toast.LENGTH_SHORT).show(); break; } } /** * @param uri 图片的路径 * @param width 截取框宽的比例 * @param height 截取框高的比例 * @param outputX 图片的宽 * @param outputY 图片的高 * @param requestCode 截取图片的请求码 */ private void toCropImage(Uri uri, int width, int height, int outputX, int outputY, int requestCode) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*");//设置图片uri intent.putExtra("crop", "true"); intent.putExtra("aspectX", width); intent.putExtra("aspectY", height); intent.putExtra("outputX", outputX); intent.putExtra("outputY", outputY); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);//设置截取完成后保存图片的地址 intent.putExtra("return-data", false);//这里由于是从sd卡直接获取图片,所以不需要通过onActivityResult方法获取数据 intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", true); startActivityForResult(intent, requestCode); }}
1 0
- Android调用相机及使用图库截取图片
- Android 调用相机或图库,裁剪图片
- android开发中调用系统的相机和图库及图片的后期处理
- Android调用系统的相机,图库,以及裁剪图片功能。
- 调用Android中相机或图库选择图片并剪切
- android调用系统相机,系统图库,系统剪裁图片
- Android 调用系统相机和图库,裁剪图片
- Android调用系统图库和相机获取图片并裁剪
- Android开发之调用系统图库及相机
- 调用系统相机和图库,裁剪图片
- 调用系统相机、图库并选择图片
- android 相机图库调用以及裁剪
- Android调用系统相机与图库
- Android调用系统相机和图库
- React Native调用Android相机图库
- React Native调用Android相机图库
- Android调用相机拍照并返回路径和调用系统图库选择图片
- Android调用相机拍照并返回路径和调用系统图库选择图片
- Unity3D游戏开发之飞机大战项目讲解,食用攻略
- 内存泄漏原因概览
- Hdu 3696 Farm Game(最长路)
- 如何实现一个malloc
- 配置Linux下的Tomcat出现的错误
- Android调用相机及使用图库截取图片
- 260.leetcode Single Number III(medium)[两个单数]
- 理解Python中的装饰器
- PhpExcel中文帮助手册|PhpExcel使用方法
- Android-代码混淆
- 一致性Hash问题总结
- iOS开发笔记>> UIButton与UITableView的层级结构
- 差分约束详解
- 102. Binary Tree Level Order Traversal