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