zoukankan      html  css  js  c++  java
  • 拍照+相册+截取图片

    一、拍照+截取

    拍照:

     mStorageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);//获取存储器的专门放图片的区域
     uri = Uri.fromFile(new File(mStorageDir.getPath()+System.currentTimeMillis()+".png")); //在该区域创建文件,并转换为uri格式
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    //将图片处理的数据传递到uri上
                    intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);
                    //在Dialog中,必须这样使用,才能回调到Activity上
                    ((Activity)mContext).startActivityForResult(intent,REQUST_PHOTO);
    拍照

    拍照完之后回调

    Activity.onActivityResult()

    if(requestCode == ImageDialog.REQUST_PHOTO){
         //截取图片   第一个参数就是刚才的uri
       cropImageUri(ImageDialog.uri,800,600,REQUST_CRAP);
    } 
    
     private void cropImageUri(Uri uri, int outputX, int outputY, int requestCode){
            Intent intent = new Intent("com.android.camera.action.CROP");
            intent.setDataAndType(uri, "image/*");
            intent.putExtra("crop", "true");
            intent.putExtra("aspectX", 2);
            intent.putExtra("aspectY", 1);
            intent.putExtra("outputX", outputX);
            intent.putExtra("outputY", outputY);
            intent.putExtra("scale", true);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
            intent.putExtra("return-data", false);
            intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
            intent.putExtra("noFaceDetection", true); // no face detection
            //发现截取完图片,还需要再次回调
            startActivityForResult(intent, requestCode);
        }
    View Code

    在从onActivityResult()中保存图片,到地址

    else if (requestCode == REQUST_CRAP){
         Bitmap bitmap = decodeUriAsBitmap(data.getData());
         imageView.setImageBitmap(bitmap);
        }
    
    
    
    
    private Bitmap decodeUriAsBitmap(Uri uri){
            Bitmap photo = null;
            Uri photoUri = uri;
            if (photoUri != null) {
                //根据uri地址获取Bitmap
                photo = BitmapFactory.decodeFile(photoUri.getPath());
            }
            Log.d(TAG,photoUri.getPath());
            if (photo == null) {
                //将图片生成jpeg
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                photo.compress(Bitmap.CompressFormat.JPEG, 100, stream);
            }
            return photo;
        }
    View Code

    二、从相册中选择+截取

       Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
                  //表明选择的是image类型
                    intent.setType("image/*");
    
                    intent.putExtra("crop", "true");
                    //截取的比例
                    intent.putExtra("aspectX", 2);
    
                    intent.putExtra("aspectY", 1);
                   //输出的像素
                    intent.putExtra("outputX", 600);
    
                    intent.putExtra("outputY", 300);
    
                    intent.putExtra("scale", true);
    
                    intent.putExtra("return-data", false);
    
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    
                    intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
    
                    intent.putExtra("noFaceDetection", true); // no face detection
    
                    ((Activity)mContext).startActivityForResult(intent, REQUEST_GALLERY);        
    View Code

    之后的步骤跟上面相同

  • 相关阅读:
    Linux下查看CPU型号,内存大小,硬盘空间的命令
    java_opts 参数与JVM内存调优
    less 查看日志
    如何实时查看Linux下日志
    mysql的sql语句的性能诊断分析
    使用zabbix-java-gateway可以通过该网关来监听多个JVM
    性能瓶颈分析
    Git客户端的安装与配置入门
    渗透测试的8个步骤 展现一次完整的渗透测试过程及思路
    Python&selenium&tesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考
  • 原文地址:https://www.cnblogs.com/rookiechen/p/5538163.html
Copyright © 2011-2022 走看看