zoukankan      html  css  js  c++  java
  • android:图片裁剪

    图片裁剪:

    public class MainActivity extends Activity {
        public final int START_CAMERA_RESULT = 1;
        public final int START_PIC_CROP_RESULT = 2;
        public final int START_CAMERA_PIC_CROP_RESULT = 3;
        private Uri imageUri;
        private ImageView pic;
        private ImageView camera;
        private Uri imageUri2;
        private Uri imageUri3;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            pic = (ImageView) findViewById(R.id.imageView_pic);
            camera = (ImageView) findViewById(R.id.imageView_camera);
    
            // 图片剪裁后保存位置
            imageUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp.jpg"));
            // 照片保存位置
            imageUri2 = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp2.jpg"));
            // 照片剪裁后保存位置
            imageUri3 = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp3.jpg"));
    
            // 图片剪裁
            Button picCrop = (Button) findViewById(R.id.btn_pic);
            picCrop.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = imageCrop(null, imageUri, Intent.ACTION_PICK);
                    startActivityForResult(intent, START_PIC_CROP_RESULT);
                }
            });
            // 启动照相机并把图片剪裁
            Button startCamera = (Button) findViewById(R.id.btn_camera);
            startCamera.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent();
                    intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri2);
                    startActivityForResult(intent, START_CAMERA_RESULT);
                }
            });
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            switch (requestCode) {
            case START_PIC_CROP_RESULT:
                setImageView(imageUri, pic);
                break;
            case START_CAMERA_RESULT:
                Intent intent = imageCrop(imageUri2, imageUri3, "com.android.camera.action.CROP");
                // 启动裁剪的activity
                startActivityForResult(intent, START_CAMERA_PIC_CROP_RESULT);
                break;
            case START_CAMERA_PIC_CROP_RESULT:// 照片剪裁后处理
                Log.i("MainActivity", "START_CAMERA_PIC_CROP_RESULT");
                setImageView(imageUri3, camera);
                break;
            default:
                break;
            }
        }
    
        /**
         * 图片剪裁函数
         * 
         * @param fromUri
         * @param toUri
         * @param action
         * @return
         */
        private Intent imageCrop(Uri fromUri, Uri toUri, String action) {
            Intent intent = new Intent();
            // Intent.ACTION_PICK
            intent.setAction(action);
            /**
             * <data android:mimeType="image/*"/>
             */
            if (fromUri != null) {
                intent.setDataAndType(fromUri, "image/*");
            } else {
                intent.setType("image/*");
            }
    
            // 设置参数
            intent.putExtra("crop", "true");// getIntent().getStringExtra("crop");
            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, toUri);
            // Log.i("MainActivity",
            // "toUri:"+toUri.toString()+"fromUri"+fromUri.toString());
            intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
            return intent;
        }
    
        /**
         * 根据Uri读取图片并显示
         * 
         * @param uri
         * @param imageView
         */
        private void setImageView(Uri uri, ImageView imageView) {
            // 读取内容提供者
            ContentResolver resovler = getContentResolver();
            InputStream is = null;
            try {
                is = resovler.openInputStream(uri);
                Bitmap bm = BitmapFactory.decodeStream(is);
                imageView.setImageBitmap(bm);
                Log.i("MainActivity", "set Bitmap");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } finally {
                if (is != null) {
                    try {
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
    }
  • 相关阅读:
    c++ 从vector扩容看noexcept应用场景
    c++11-17 模板核心知识(十一)—— 编写泛型库需要的基本技术
    动态链接的PLT与GOT
    c++11-17 模板核心知识(十)—— 区分万能引用(universal references)和右值引用
    Golang性能分析与优化
    c++11-17 模板核心知识(九)—— 理解decltype与decltype(auto)
    [LuoguP4808][CCC 2018]平衡树(数论分块+记忆化搜索)(有复杂度证明)
    [NOI2016]区间(线段树+尺取法)
    [BZOJ4316]小C的独立集(仙人掌+树形DP)
    [CTSC2002]灭鼠行动(模拟)
  • 原文地址:https://www.cnblogs.com/mada0/p/4818692.html
Copyright © 2011-2022 走看看