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();
                    }
                }
            }
        }
    
    }
  • 相关阅读:
    SVNKit学习——基于Repository的操作之print repository tree、file content、repository history(四)
    java操作svn【svnkit】实操
    python笔记38-使用zmail发各种邮件案例代码
    python笔记37-史上最好用的发邮件zmail
    python笔记3-邮件发送(smtplib)
    第9期《python3接口自动化测试》课程,6月29号开学!
    anyproxy学习4-Linux(Centos)搭建anyproxy环境
    anyproxy学习3-修改返回内容(beforeSendResponse)
    anyproxy学习2-rule模块实现接口mock功能
    anyproxy学习1-windows平台安装和抓手机app上https请求
  • 原文地址:https://www.cnblogs.com/mada0/p/4818692.html
Copyright © 2011-2022 走看看