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;
- }
-
-
- }