android 裁剪图片大小 控制图片尺寸

用BitmapFactory获取适合屏幕大小的图片 和自带的图片裁剪工具




package com.lin.image;

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

	@Override
	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 裁剪图片大小 控制图片尺寸_第1张图片   android 裁剪图片大小 控制图片尺寸_第2张图片

你可能感兴趣的:(android,image处理)