歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 裁剪圖片大小 控制圖片尺寸

Android 裁剪圖片大小 控制圖片尺寸

日期:2017/3/1 10:45:30   编辑:Linux編程

Android 用BitmapFactory獲取適合屏幕大小的圖片 和自帶的圖片裁剪工具

  1. package com.lin.image;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.graphics.Bitmap;
  5. import android.graphics.BitmapFactory;
  6. import android.net.Uri;
  7. import android.os.Bundle;
  8. import android.view.View;
  9. import android.widget.Button;
  10. import android.widget.ImageView;
  11. public class ImageScaleActivity extends Activity implements View.OnClickListener{
  12. /** Called when the activity is first created. */
  13. private Button selectImageBtn;
  14. private Button cutImageBtn;
  15. private ImageView imageView;
  16. private static final int IMAGE_SELECT=1;
  17. private static final int IMAGE_CUT=2;
  18. @Override
  19. public void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.main);
  22. selectImageBtn=(Button)findViewById(R.id.selectImageBtn);
  23. cutImageBtn=(Button)findViewById(R.id.catImageBtn);
  24. imageView=(ImageView)findViewById(R.id.imageView);
  25. cutImageBtn.setOnClickListener(this);
  26. selectImageBtn.setOnClickListener(this);
  27. }
  28. @Override
  29. public void onClick(View v) {
  1. //截取適合屏幕大小的圖片
  2. if(v==selectImageBtn){
  3. Intent intent=new Intent(Intent.ACTION_PICK,
  4. android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
  5. startActivityForResult(intent, IMAGE_SELECT);
  6. }//一般用於頭像等需要設置指定大小
  7. else if(v==cutImageBtn){
  8. Intent intent=getImageClipIntent();
  9. startActivityForResult(intent, IMAGE_CUT);
  10. }
  11. }
  12. @Override
  13. protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
  14. // TODO Auto-generated method stub
  15. if(resultCode==RESULT_OK){
  16. if(requestCode==IMAGE_SELECT){
  17. Uri imageFileUri =intent.getData();
  18. int dw=getWindowManager().getDefaultDisplay().getWidth();
  19. int dh=getWindowManager().getDefaultDisplay().getHeight()/2;
  20. //已屏幕寬 和一般的高作為圖片顯示的最大尺寸
  21. try{
  22. BitmapFactory.Options factory=new BitmapFactory.Options();
  23. factory.inJustDecodeBounds=true; //當為true時 允許查詢圖片不為 圖片像素分配內存
  24. Bitmap bmp=BitmapFactory.decodeStream(getContentResolver()
  25. .openInputStream(imageFileUri),null,factory);
  26. int hRatio=(int)Math.ceil(factory.outHeight/(float)dh); //圖片是高度的幾倍
  27. int wRatio=(int)Math.ceil(factory.outWidth/(float)dw); //圖片是寬度的幾倍
  28. System.out.println("hRatio:"+hRatio+" wRatio:"+wRatio);
  29. //縮小到 1/ratio的尺寸和 1/ratio^2的像素
  30. if(hRatio>1||wRatio>1){
  31. if(hRatio>wRatio){
  32. factory.inSampleSize=hRatio;
  33. }
  34. else
  35. factory.inSampleSize=wRatio;
  36. }
  37. factory.inJustDecodeBounds=false;
  38. bmp=BitmapFactory.decodeStream(getContentResolver()
  39. .openInputStream(imageFileUri),null,factory);
  40. imageView.setImageBitmap(bmp);
  41. }catch(Exception ex){
  42. }
  43. }
  44. else if(requestCode==IMAGE_CUT){
  45. Bitmap bmp=intent.getParcelableExtra("data");
  46. imageView.setImageBitmap(bmp);
  47. }
  48. }
  49. }
  50. /**
  51. * 獲取剪切後的圖片
  52. */
  53. public static Intent getImageClipIntent() {
  54. Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
  55. intent.setType("image/*");
  56. intent.putExtra("crop", "true");
  57. intent.putExtra("aspectX", 1);//裁剪框比例
  58. intent.putExtra("aspectY", 1);
  59. intent.putExtra("outputX", 80);//輸出圖片大小
  60. intent.putExtra("outputY", 80);
  61. intent.putExtra("return-data", true);
  62. return intent;
  63. }
  64. }

Copyright © Linux教程網 All Rights Reserved