android裁剪图片

xml如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="vertical">

    <Button
        android:id="@+id/selectImageBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="selectImageBtn" />

    <Button
        android:id="@+id/catImageBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="catImageBtn" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_action_search" />

</LinearLayout>



package com.xy.caijiantupian;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity implements View.OnClickListener {
	/** Called when the activity is first created. */
	private Button selectImageBtn;
	private Button cutImageBtn;
	private ImageView imageView;
	private static final int IMAGE_SELECT = 1;
	private static final int IMAGE_CUT = 2;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		selectImageBtn = (Button) findViewById(R.id.selectImageBtn);
		cutImageBtn = (Button) findViewById(R.id.catImageBtn);
		imageView = (ImageView) findViewById(R.id.imageView);

		cutImageBtn.setOnClickListener(this);
		selectImageBtn.setOnClickListener(this);

	}

	public void onClick(View v) {

		// 截取适合屏幕大小的图片
		if (v == selectImageBtn) {
			Intent intent = new Intent(
					Intent.ACTION_PICK,
					android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
			startActivityForResult(intent, IMAGE_SELECT);
		}// 一般用于头像等需要设置指定大小
		else if (v == cutImageBtn) {
			Intent intent = getImageClipIntent();
			startActivityForResult(intent, IMAGE_CUT);
		}
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode,
			Intent intent) {
		// TODO Auto-generated method stub
		if (resultCode == RESULT_OK) {
			if (requestCode == IMAGE_SELECT) {
				Uri imageFileUri = intent.getData();
				int dw = getWindowManager().getDefaultDisplay().getWidth();
				int dh = getWindowManager().getDefaultDisplay().getHeight() / 2;
				// 已屏幕宽 和一般的高作为图片显示的最大尺寸
				try {
					BitmapFactory.Options factory = new BitmapFactory.Options();
					factory.inJustDecodeBounds = true; // 当为true时 允许查询图片不为
														// 图片像素分配内存
					Bitmap bmp = BitmapFactory.decodeStream(
							getContentResolver().openInputStream(imageFileUri),
							null, factory);
					int hRatio = (int) Math
							.ceil(factory.outHeight / (float) dh); // 图片是高度的几倍
					int wRatio = (int) Math.ceil(factory.outWidth / (float) dw); // 图片是宽度的几倍
					System.out.println("hRatio:" + hRatio + "  wRatio:"
							+ wRatio);
					// 缩小到 1/ratio的尺寸和 1/ratio^2的像素
					if (hRatio > 1 || wRatio > 1) {
						if (hRatio > wRatio) {
							factory.inSampleSize = hRatio;
						} else
							factory.inSampleSize = wRatio;
					}
					factory.inJustDecodeBounds = false;
					bmp = BitmapFactory.decodeStream(getContentResolver()
							.openInputStream(imageFileUri), null, factory);
					imageView.setImageBitmap(bmp);
				} catch (Exception ex) {

				}
			} else if (requestCode == IMAGE_CUT) {
				Bitmap bmp = intent.getParcelableExtra("data");
				imageView.setImageBitmap(bmp);
			}
		}

	}

	/**
	 * 获取剪切后的图片
	 */
	public static Intent getImageClipIntent() {

		Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
		intent.setType("image/*");
		intent.putExtra("crop", "true");
		intent.putExtra("aspectX", 1);// 裁剪框比例
		intent.putExtra("aspectY", 1);
		intent.putExtra("outputX", 80);// 输出图片大小
		intent.putExtra("outputY", 80);
		intent.putExtra("return-data", true);
		return intent;
	}

}




   

你可能感兴趣的:(android,exception,image,layout,null,button)