精华内容
下载资源
问答
  • Android 拍照或从相册选择图片

    千次阅读 2018-12-20 16:49:30
    activity中: AlertDialog.Builder builder = new AlertDialog.Builder(this);...拍照", "相册"}; builder.setItems(sj, new DialogInterface.OnClickListener() { ...

    activity中:

    
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    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.annotation.Nullable;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    
    import java.io.File;
    
    
    public class XJ_Activity extends AppCompatActivity implements View.OnClickListener {
        private Button tt;
        private ImageView imgxx;
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.xj);
            initView();
        }
    
        private void initView() {
            tt = (Button) findViewById(R.id.tt);
            imgxx = (ImageView) findViewById(R.id.imgxx);
    
            tt.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.tt:
    
                    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                            String sj[] = {"拍照", "相册"};
                            builder.setItems(sj, new DialogInterface.OnClickListener() {
    
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    switch (which) {
                                        case 0:
                                            xj();
                                            break;
                                        case 1:
                                            xc();
                                            break;
    
                                    }
    
                                }
                            });
                            //取消
                            builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
    
    
                                }
                            });
                            builder.show();
    
                    break;
            }
        }
        private void xc() {
    
            Intent intentxc = new Intent();
            // 设置文件类型
            intentxc.setType("image/*");
            intentxc.setAction(Intent.ACTION_PICK);
            startActivityForResult(intentxc, 100);
    
        }
        private void xj() {
            Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"lyq.jpg")));
    
            startActivityForResult(intent,200);
    
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            //super.onActivityResult(requestCode, resultCode, data);
    
            if (requestCode==100&&resultCode==RESULT_OK){
                cj(data.getData());
            }
            if (requestCode==200&&resultCode==RESULT_OK){
                File tempFile = new File(
                        Environment.getExternalStorageDirectory(),
                        "lyq.jpg");
    
    
             cj(Uri.fromFile(tempFile));
            }
    
            if (requestCode==300&&resultCode==RESULT_OK){
    
                Bundle extras = data.getExtras();
                if (extras != null) {
                    Bitmap photo = extras.getParcelable("data");
                    imgxx.setImageBitmap(photo);
    
                }
            }
        }
        public void cj(Uri uri){
    
            Intent intent = new Intent("com.android.camera.action.CROP");
            intent.setDataAndType(uri, "image/*");
    
            // 设置裁剪
            intent.putExtra("crop", "true");
    
            // aspectX , aspectY :宽高的比例
            intent.putExtra("aspectX", 1);
            intent.putExtra("aspectY", 1);
    
            // outputX , outputY : 裁剪图片宽高
            intent.putExtra("outputX", 100);
            intent.putExtra("outputY", 100);
            intent.putExtra("return-data", true);
    
            startActivityForResult(intent, 300);
        }
    }
    
    

    权限:

    <uses-feature android:name="android.hardware.camera" /> 
    <!--相机权限-->
     <uses-permission android:name="android.permission.CAMERA" /> 
     <!--写入SD卡的权限:如果你希望保存相机拍照后的照片--> 
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
     <!--读取SD卡的权限:打开相册选取图片所必须的权限--> 
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
    
    展开全文
  • 今天看《第一行代码》上面关于拍照从相册选取图片那一部分,发现始终出不来效果,所以搜索其他资料学习一下相关知识,写一个简单的Demo。 一、 拍照选择图片 1、使用隐式Intent启动相机 //构建隐式Intent Intent ...

    今天看《第一行代码》上面关于拍照和从相册选取图片那一部分,发现始终出不来效果,所以搜索其他资料学习一下相关知识,写一个简单的Demo。

    一、 拍照选择图片

    1、使用隐式Intent启动相机

    //构建隐式Intent
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    //调用系统相机
    startActivityForResult(intent, 1);
    复制代码

    2、处理相机拍照返回的结果

    //用户点击了取消
    if(data == null){
        return;
    }else{
        Bundle extras = data.getExtras();
        if (extras != null){
            //获得拍的照片
            Bitmap bm = extras.getParcelable("data");
        }
    }
    复制代码

    二、 从图库选择图片

    1、构建内容选择隐式Intent

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    复制代码

    2、设置内容类型为图片

    intent.setType("image/*");
    复制代码

    3、启动图片选择

    startActivityForResult(intent, 2);
    复制代码

    4、处理图片选择结果

    if (data == null){
        return;
    }else{
        //用户从图库选择图片后会返回所选图片的Uri
        Uri uri;
        //获取到用户所选图片的Uri
        uri = data.getData();
    }
    复制代码

    三、 裁剪选择的图片

    从相机拍照得到的是Bitmap类型,所以我们需要先将其转化为文件Uri以供裁剪。同时我们还要顺便将相机拍的照片保存到本地。

    /**
     * 将Bitmap写入SD卡中的一个文件中,并返回写入文件的Uri
     * @param bm
     * @param dirPath
     * @return
     */
    private Uri saveBitmap(Bitmap bm, String dirPath) {
        //新建文件夹用于存放裁剪后的图片
        File tmpDir = new File(Environment.getExternalStorageDirectory() + "/" + dirPath);
        if (!tmpDir.exists()){
            tmpDir.mkdir();
        }
    
        //新建文件存储裁剪后的图片
        File img = new File(tmpDir.getAbsolutePath() + "/avator.png");
        try {
            //打开文件输出流
            FileOutputStream fos = new FileOutputStream(img);
            //将bitmap压缩后写入输出流(参数依次为图片格式、图片质量和输出流)
            bm.compress(Bitmap.CompressFormat.PNG, 85, fos);
            //刷新输出流
            fos.flush();
            //关闭输出流
            fos.close();
            //返回File类型的Uri
            return Uri.fromFile(img);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
    复制代码

    从图库选择的图片返回的是content类型的Uri,我们需要转化为文件类型的Uri才能进行裁剪。

    /**
    * 将content类型的Uri转化为文件类型的Uri
    * @param uri
    * @return
    */
    private Uri convertUri(Uri uri){
       InputStream is;
       try {
           //Uri ----> InputStream
           is = getContentResolver().openInputStream(uri);
           //InputStream ----> Bitmap
           Bitmap bm = BitmapFactory.decodeStream(is);
           //关闭流
           is.close();
           return saveBitmap(bm, "temp");
       } catch (FileNotFoundException e) {
           e.printStackTrace();
           return null;
       } catch (IOException e) {
           e.printStackTrace();
           return null;
       }
    
    }
    复制代码

    下面便是设置裁剪的参数,用隐式Intent方式启动裁剪程序

    /**
     * 通过Uri传递图像信息以供裁剪
     * @param uri
     */
    private void startImageZoom(Uri uri){
        //构建隐式Intent来启动裁剪程序
        Intent intent = new Intent("com.android.camera.action.CROP");
        //设置数据uri和类型为图片类型
        intent.setDataAndType(uri, "image/*");
        //显示View为可裁剪的
        intent.putExtra("crop", true);
        //裁剪的宽高的比例为1:1
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        //输出图片的宽高均为150
        intent.putExtra("outputX", 150);
        intent.putExtra("outputY", 150);
        //裁剪之后的数据是通过Intent返回
        intent.putExtra("return-data", true);
        startActivityForResult(intent, CROP_CODE);
    }
    复制代码

    下面是完整的布局文件和java文件


    activity_main.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <ImageView
            android:id="@+id/show_image"
            android:layout_width="match_parent"
            android:layout_height="300dp"/>
        <Button
            android:id="@+id/choose_camera"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="摄像头"/>
        <Button
            android:id="@+id/choose_gallery"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="相册"/>
    </LinearLayout>
    复制代码

    MainActivity.java文件

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        //用于展示选择的图片
        private ImageView mImageView;
    
        private static final int CAMERA_CODE = 1;
        private static final int GALLERY_CODE = 2;
        private static final int CROP_CODE = 3;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            initView();
        }
    
        private void initView() {
            mImageView = (ImageView) findViewById(R.id.show_image);
            Button chooseCamera = (Button) findViewById(R.id.choose_camera);
            chooseCamera.setOnClickListener(this);
            Button chooseGallery = (Button) findViewById(R.id.choose_gallery);
            chooseGallery.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View view) {
            switch (view.getId()){
                case R.id.choose_camera:
                    //拍照选择
                    chooseFromCamera();
                    break;
                case R.id.choose_gallery:
                    //从相册选取
                    chooseFromGallery();
                    break;
                default:
                    break;
            }
        }
    
        /**
         * 拍照选择图片
         */
        private void chooseFromCamera() {
            //构建隐式Intent
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            //调用系统相机
            startActivityForResult(intent, CAMERA_CODE);
        }
    
        /**
         * 从相册选择图片
         */
        private void chooseFromGallery() {
            //构建一个内容选择的Intent
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
            //设置选择类型为图片类型
            intent.setType("image/*");
            //打开图片选择
            startActivityForResult(intent, GALLERY_CODE);
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            switch (requestCode){
                case CAMERA_CODE:
                    //用户点击了取消
                    if(data == null){
                        return;
                    }else{
                        Bundle extras = data.getExtras();
                        if (extras != null){
                            //获得拍的照片
                            Bitmap bm = extras.getParcelable("data");
                            //将Bitmap转化为uri
                            Uri uri = saveBitmap(bm, "temp");
                            //启动图像裁剪
                            startImageZoom(uri);
                        }
                    }
                    break;
                case GALLERY_CODE:
                    if (data == null){
                        return;
                    }else{
                        //用户从图库选择图片后会返回所选图片的Uri
                        Uri uri;
                        //获取到用户所选图片的Uri
                        uri = data.getData();
                        //返回的Uri为content类型的Uri,不能进行复制等操作,需要转换为文件Uri
                        uri = convertUri(uri);
                        startImageZoom(uri);
                    }
                    break;
                case CROP_CODE:
                    if (data == null){
                        return;
                    }else{
                        Bundle extras = data.getExtras();
                        if (extras != null){
                            //获取到裁剪后的图像
                            Bitmap bm = extras.getParcelable("data");
                            mImageView.setImageBitmap(bm);
                        }
                    }
                    break;
                default:
                    break;
            }
        }
    
        /**
         * 将content类型的Uri转化为文件类型的Uri
         * @param uri
         * @return
         */
        private Uri convertUri(Uri uri){
            InputStream is;
            try {
                //Uri ----> InputStream
                is = getContentResolver().openInputStream(uri);
                //InputStream ----> Bitmap
                Bitmap bm = BitmapFactory.decodeStream(is);
                //关闭流
                is.close();
                return saveBitmap(bm, "temp");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                return null;
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
        }
    
        /**
         * 将Bitmap写入SD卡中的一个文件中,并返回写入文件的Uri
         * @param bm
         * @param dirPath
         * @return
         */
        private Uri saveBitmap(Bitmap bm, String dirPath) {
            //新建文件夹用于存放裁剪后的图片
            File tmpDir = new File(Environment.getExternalStorageDirectory() + "/" + dirPath);
            if (!tmpDir.exists()){
                tmpDir.mkdir();
            }
    
            //新建文件存储裁剪后的图片
            File img = new File(tmpDir.getAbsolutePath() + "/avator.png");
            try {
                //打开文件输出流
                FileOutputStream fos = new FileOutputStream(img);
                //将bitmap压缩后写入输出流(参数依次为图片格式、图片质量和输出流)
                bm.compress(Bitmap.CompressFormat.PNG, 85, fos);
                //刷新输出流
                fos.flush();
                //关闭输出流
                fos.close();
                //返回File类型的Uri
                return Uri.fromFile(img);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                return null;
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }
    
        }
    
        /**
         * 通过Uri传递图像信息以供裁剪
         * @param uri
         */
        private void startImageZoom(Uri uri){
            //构建隐式Intent来启动裁剪程序
            Intent intent = new Intent("com.android.camera.action.CROP");
            //设置数据uri和类型为图片类型
            intent.setDataAndType(uri, "image/*");
            //显示View为可裁剪的
            intent.putExtra("crop", true);
            //裁剪的宽高的比例为1:1
            intent.putExtra("aspectX", 1);
            intent.putExtra("aspectY", 1);
            //输出图片的宽高均为150
            intent.putExtra("outputX", 150);
            intent.putExtra("outputY", 150);
            //裁剪之后的数据是通过Intent返回
            intent.putExtra("return-data", true);
            startActivityForResult(intent, CROP_CODE);
        }
    }
    复制代码

    注:最后还需要在AndroidManifest文件中加入存储卡读写权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    复制代码
    展开全文
  • 拍照或从相册选择成功后使用 EventBus 发出广播回传图片路径,和调用者充分解耦合 根据传入参数支持裁剪和不裁剪两种模式 /** * <pre> * 拍照及从相册选择弹出 activity * 成功后会发送 ...

    android 拍照及从相册选择组件

    单独封装到一个 activity 中便于更好的复用

    拍照或从相册选择成功后使用 EventBus 发出广播回传图片路径,和调用者充分解耦合

    根据传入参数支持裁剪和不裁剪两种模式

    /**
     * <pre>
     * 拍照及从相册选择弹出 activity 
     * 成功后会发送 TakePhotoOutputEvent 事件,返回图片路径
     * </pre>
     */
    public class TakePhotoPopupActivity extends Activity {
        public static final int REQUEST_CODE_CAMERA = 110;
        public static final int REQUEST_CODE_ALBUM = 111;
        public static final int REQUEST_CODE_CROP = 112;
    
        @ViewInject(R.id.takephoto_popup_layout)
        private RelativeLayout outContainer;
        @ViewInject(R.id.take_photo)
        private TextView takePhoto;
        @ViewInject(R.id.select_from_album)
        private TextView openAlbum;
        @ViewInject(R.id.cancel_photo)
        private TextView cancel;
    
        private String photoFileSavePath;
        private String croppedFileSavePath;
        private boolean isCrop;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_takephoto_popup);
            ViewUtils.inject(this);
    
            Intent intent = getIntent();
            if (intent != null) {
                photoFileSavePath = intent.getStringExtra("photoFileSavePath");
                croppedFileSavePath = intent.getStringExtra("croppedFileSavePath");
                isCrop = intent.getBooleanExtra("isCrop", false);
            }
        }
    
        @OnClick({ R.id.take_photo, R.id.select_from_album, R.id.cancel_photo, R.id.takephoto_popup_layout })
        public void buttonOnclick(View v) {
            switch (v.getId()) {
            case R.id.take_photo:
                openCamera(photoFileSavePath);
                break;
            case R.id.select_from_album:
                openAlbum();
                break;
            case R.id.cancel_photo:
                finish();
                break;
            case R.id.takephoto_popup_layout:
                finish();
                break;
            }
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            try {
                if (requestCode == REQUEST_CODE_CAMERA && resultCode == Activity.RESULT_OK) { // 相机
                    if (isCrop) {
                        // 裁剪
                        cropImage(photoFileSavePath, croppedFileSavePath);
                    } else {
                        // 不裁剪
                        EventBus.getDefault().post(new TakePhotoOutputEvent(requestCode, resultCode, photoFileSavePath));
                        finish();
                    }
                } else if (requestCode == REQUEST_CODE_ALBUM && resultCode == Activity.RESULT_OK) { // 相册
                    try {
                        // 得到图片路径
                        Uri selectedImage = data.getData();
                        String[] filePathColumn = { MediaStore.Images.Media.DATA };
                        Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
                        cursor.moveToFirst();
                        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                        String picPath = cursor.getString(columnIndex);
                        cursor.close();
    
                        if (isCrop) {
                            cropImage(picPath, croppedFileSavePath);
                        } else {
                            EventBus.getDefault().post(new TakePhotoOutputEvent(requestCode, resultCode, picPath));
                            finish();
                        }
                    } catch (Exception e) {
    
                    }
                } else if (requestCode == REQUEST_CODE_CROP && resultCode == Activity.RESULT_OK) { // 裁剪回来
                    EventBus.getDefault().post(new TakePhotoOutputEvent(requestCode, resultCode, croppedFileSavePath));
                    finish();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public void openAlbum() {
            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.setDataAndType(MediaStore.Images.Media.INTERNAL_CONTENT_URI, "image/*");
            startActivityForResult(intent, REQUEST_CODE_ALBUM);
        }
    
        /**
         * 裁剪相册照片
         * 
         */
        public void cropImage(String originFilePath, String croppedFilePath) {
            File originFile = new File(originFilePath);
            if (originFile == null || !originFile.exists()) {
                return;
            }
    
            try {
                if (croppedFilePath == null) {
                    croppedFilePath = getExternalFilesDir(null) + "/" + "tmpcropped.png";
                    this.croppedFileSavePath = croppedFilePath;
                }
    
                Uri originUri = Uri.fromFile(new File(originFilePath));
                Uri croppedFileUri = Uri.fromFile(new File(croppedFilePath));
                Intent intent = new Intent("com.android.camera.action.CROP");
                intent.setDataAndType(originUri, "image/*");
                intent.putExtra("crop", true);
                intent.putExtra("aspectX", 1);
                intent.putExtra("aspectY", 1);
                intent.putExtra("outputX", 120);
                intent.putExtra("outputY", 120);
                intent.putExtra("return-data", true);
                intent.putExtra("output", croppedFileUri);
                startActivityForResult(intent, REQUEST_CODE_CROP);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        private void openCamera(String filePath) {
            try {
                if (filePath == null) {
                    filePath = getExternalFilesDir(null) + "/" + "tmpcamera.png";
                    this.photoFileSavePath = filePath;
                }
    
                Uri uri = Uri.fromFile(new File(filePath));
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
                startActivityForResult(intent, REQUEST_CODE_CAMERA);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    demo github: https://github.com/lesliebeijing/AndroidPickPhotoComponent

     

    转载于:https://www.cnblogs.com/lesliefang/p/4469289.html

    展开全文
  • Android开发,从相册图片或拍照返回的值有两种格式,一种是返回bitmap数据,另一种是返回uri,小图可以使用前者,大图最好使用后者。(原文地址http://www.cnblogs.com/w-y-f/p/4028379.html) 需要注意的地方: 1...

    Android开发,从相册图片或拍照返回的值有两种格式,一种是返回bitmap数据,另一种是返回uri,小图可以使用前者,大图最好使用后者。(原文地址http://www.cnblogs.com/w-y-f/p/4028379.html)


    需要注意的地方:

    1、temp.jpg文件地址一定要存在,否则报错。

    2、如果是以对话框的形式提示用户选择拍照还是从相册获取,前者一定要先关闭对话框,再调用相机拍照。

    拍照截图

        拍照截图有点儿特殊,要知道,现在的Android智能手机的摄像头都是几百万的像素,拍出来的图片都是非常大的。因此,我们不能像对待相册截图一样使用Bitmap小图,无论大图小图都统一使用Uri进行操作。

        一、首先准备好需要使用到的Uri:

    private static final String IMAGE_FILE_LOCATION = "file:///sdcard/temp.jpg";//temp file
    Uri imageUri = Uri.parse(IMAGE_FILE_LOCATION);//The Uri to store the big bitmap

        二、使用MediaStore.ACTION_IMAGE_CAPTURE可以轻松调用Camera程序进行拍照:

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//action is capture
    
    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    
    startActivityForResult(intent, TAKE_BIG_PICTURE);//or TAKE_SMALL_PICTURE

        三、接下来就可以在 onActivityResult中拿到返回的数据(Uri),并将Uri传递给截图的程序。

    switch (requestCode) {
    
        case TAKE_BIG_PICTURE:
    
        Log.d(TAG, "TAKE_BIG_PICTURE: data = " + data);//it seems to be null
        //TODO sent to crop
    
        cropImageUri(imageUri, 800, 400, CROP_BIG_PICTURE);
    
        break;
    
        case TAKE_SMALL_PICTURE:
    
        Log.i(TAG, "TAKE_SMALL_PICTURE: data = " + data);
    
        //TODO sent to crop
    
        cropImageUri(imageUri, 300, 150, CROP_SMALL_PICTURE);
    
        break;
    
        default:
    
        break;
    
        }

        可以看到,无论是拍大图片还是小图片,都是使用的Uri,只是尺寸不同而已。我们将这个操作封装在一个方法里面。

    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);
    
        }

        四、最后一步,我们已经将数据传入裁剪图片程序,接下来要做的就是处理返回的数据了:

        switch (requestCode) {
    
        case CROP_BIG_PICTURE://from crop_big_picture
    
        Log.d(TAG, "CROP_BIG_PICTURE: data = " + data);//it seems to be null
    
        if(imageUri != null){
    
        Bitmap bitmap = decodeUriAsBitmap(imageUri);
    
        imageView.setImageBitmap(bitmap);
    
        }
    
        break;
    
        case CROP_SMALL_PICTURE:
    
        if(imageUri != null){
    
        Bitmap bitmap = decodeUriAsBitmap(imageUri);
    
        imageView.setImageBitmap(bitmap);
    
        }else{
    
        Log.e(TAG, "CROP_SMALL_PICTURE: data = " + data);
    
        }
    
        break;
    
        default:
    
        break;
    
        }

    展开全文
  • Android拍照或从系统相册获取图片

    万次阅读 2016-08-21 14:01:27
    android拍照,android系统相册选择照片,android获取图片,android调用相机
  • 这里用简单的方法实现: 1、申明对象: private Uri photoUri1; private static final int PHOTO_REQUEST_CAMERA = 1;...// 从相册选择 2、弹出菜单选择拍照 或者 相册,将下面代码放在你的事件里: Ale
  • 今天看《第一行代码》上面关于拍照从相册选取图片那一部分,发现始终出不来效果,所以搜索其他资料学习一下相关知识,写一个简单的Demo。  一、 拍照选择图片 1、使用隐式Intent启动相机 //构建隐式Intent ...
  • android拍照或从相册选取图片

    千次阅读 2019-06-24 14:39:14
    从相册或拍照更换图片功能的实现:(取图无裁剪功能) 获取图片方式:(类似更换头像的效果) ...创建xml布局文件(activity_main.xml ): 头部两个Button按钮,一个控制从相册选择照片,一个控制启动...
  • 布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" >
  • 1.在activity中定义变量 private final int RESULT_PHOTO_KITKAT = 0;//图库返回 ...//相册返回  private final int RESULT_CAMERA = 2;//相机返回  private final int RESULT_CROP = 3;//裁剪  p
  • 1,让用户通过选择本地相册之类的图片库中已有的图像,裁剪后作为头像。 2,让用户启动手机的相机拍照,拍完照片后裁剪,然后作为头像。 我现在写一个简单的完整代码例子,说明如何在Android中实现上述两个...
  • 在使用华为Mate30是图库选择图片,本地无法显示,其他手机没问题,发现是兼容Android10的问题,Android10下本app的私有文件是不需要权限的,访问其他应用权限需要权限 修改方法 AndroidManifest.xml 中增加 ...
  • 拍照或从相册选择图片是我们日常开发中经常使用到的,可以说是必须掌握的东西。上一篇我介绍了如何生成自定义二维码《Android生成自定义二维码》,其中logo和代替黑色色块的图片都是写死的,所以现在我们就来实现...
  • 系统相册选择照片则调用系统相机。大部分的项目都会用到,我进行了一下封装,仿ios的效果。 效果如下: 1、Camera的基类 package com.zhang.test.picture; import android.app.Activity; import ...
  • 简介: 一款用于在 Android 设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库 更多:作者提 Bug官网 标签: 转存失败转存失败重新上传取消转存失败重新上传取消 TakePhoto是一款...
  • 需要上传图片的地方的都会有图片选择这项功能,Android当然也k
  • 拍照或从相册选择

    千次阅读 2015-06-17 14:31:54
    1.Dialog布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/w
  • 默认情况下情况下,使用Android的WebView是不能够支持上传文件的。经过查找资料,得知需要重新WebChromeClient,根据选择到的文件Uri,传给页面去上传就可以了。自定义WebChromeClient先在WebViewActivity里面自定义...
  • 支持从相册选择图片 支持从文件选择图片 支持批量图片选取 支持图片压缩以及批量图片压缩 支持图片裁切以及批量图片裁切 支持照片旋转角度自动纠正 支持自动权限管理(无需关心SD卡及摄像头权限等问题) 支持对裁剪及...
  • 1、让用户通过选择本地相册之类的图片库中已有的图像,裁剪后作为头像。  2、让用户启动手机的相机拍照,拍完照片后裁剪,然后作为头像。  我现在写一个简单的完整代码例子,说明如何在android中实现上述两个...
  • 打开相机拍照或从相册选择照片

    千次阅读 2018-11-05 13:57:01
    uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&amp;gt; &amp;lt;uses-permission android:name=&quot;android.permission.READ_EXTERNAL_STORAGE&...

空空如也

空空如也

1 2 3 4 5 6
收藏数 117
精华内容 46
关键字:

android拍照或从相册选择