博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
调用摄像头和相册
阅读量:4655 次
发布时间:2019-06-09

本文共 3809 字,大约阅读时间需要 12 分钟。

1.调用摄像头拍照

 

public class MainActivity extends Activity {    public static final int TAKE_PHOTO = 1;        public static final int GROP_PHOTO = 2;        private Button takePhoto;         private ImageView picture;        private Uri imagrUri;        @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();                }                imagrUri=Uri.fromFile(outputImage);                Intent intent=new Intent("android.media.action.IMAGE_CAPTURE");                intent.putExtra(MediaStore.EXTRA_OUTPUT, imagrUri);                startActivityForResult(intent, TAKE_PHOTO);                //启动照相机            }        });    }    @Override    public 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(imagrUri, "image/**");                intent.putExtra("scale", true);                intent.putExtra(MediaStore.EXTRA_OUTPUT, imagrUri);                startActivityForResult(intent, GROP_PHOTO);                //启动剪裁程序            }            break;        case GROP_PHOTO:            if(resultCode == RESULT_OK){                try{                    Bitmap bitmap=BitmapFactory.decodeStream(                            getContentResolver().openInputStream(imagrUri));                    picture.setImageBitmap(bitmap);                    //将剪裁后的照片显示出来                }catch(FileNotFoundException e){                    e.printStackTrace();                }            }            break;            default:                break;        }    }    }

声明权限,向SD卡中写数据操作的声明。

MainActivity要做的第一件事是分别获得Button和ImageView的实例,并给Button注册商点击事件,然后再Button的点击事件里开始处理调用摄像头的逻辑。

首先,创建一个File对象,用于存储摄像头拍下的图片,这里把图片名字命名为tempImage.jpg,并把它存放在手机SD卡的根目录,调用Enviroment的getExternalStorageDirectory()方法获得的就是SD卡的根目录;然后调用Uri的fromFile()将File对象转换成Uri对象,这个Uri对象标志着output_image.jpg这张图片的唯一地址。

调用BitmapFactory的decodeStream()方法将图片解析成Bitmap对象,然后把他设置到ImageView中显示出来

2.从相册中选择照片

choose.setOnClickListener(new OnClickListener() {                        @Override            public void onClick(View v) {                File outputImage=new File(Environment.getExternalStorageDirectory(),"output_image.jpg");                try{                    if(outputImage.exists()){                        outputImage.delete();                    }                    outputImage.createNewFile();                }catch(IOException e){                    e.printStackTrace();                }                                        imageUri = Uri.fromFile(outputImage);            Intent intent=new Intent("android.intent.action.GET_CONTENT");            intent.setType("image/*");            intent.putExtra("crop",true);            intent.putExtra("scale",true);            intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);            startActivityForResult(intent,CROP_PHOTO);            }        });

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

转载于:https://www.cnblogs.com/chhom/p/5121316.html

你可能感兴趣的文章
Redis Windows版安装详解
查看>>
linux后台运行python程序 nohup
查看>>
吴裕雄--天生自然 高等数学学习:对面积的曲面积分
查看>>
css
查看>>
Web应用程序整体测试基础——单元测试
查看>>
通过修改manifest文件来解决Vista/Win7/Win8/win10下应用程序兼容性问题
查看>>
Spark使用总结与分享
查看>>
Line 7.10 : Syntax error
查看>>
[转] 树状数组学习
查看>>
ASP.NET-ActionFilter过滤器用法实例
查看>>
将url的查询参数解析成字典对象
查看>>
Redis与RabbitMQ作为消息队列的比较
查看>>
mybatis实战教程三:mybatis和springmvc整合
查看>>
Java多线程:Semaphore
查看>>
960栅格化优势
查看>>
LSP原则—关于正方形不是长方形
查看>>
Android内核开发 相关工具及源码下载汇总
查看>>
多线程(二)--NSThread基本使用
查看>>
使用Photon引擎进行unity网络游戏开发(二)——Photon常用类介绍
查看>>
html里 调整字间距
查看>>