Android应用中图片的裁剪


我们在做Android应用时,经常要用到图片的裁剪,下面以把相册里的照片设置为用户头像来解释android中如何实现裁剪。
  1. <?xml version="1.0" encoding="utf-8"?>    
  2.     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
  3.         android:orientation="vertical" android:layout_width="fill_parent"    
  4.         android:layout_height="fill_parent">    
  5.         <ImageView android:id="@+id/imageID"    
  6.             android:adjustViewBounds="true"   
  7.             android:src="@drawable/shan"   
  8.             android:layout_width="wrap_content"    
  9.             android:layout_height="wrap_content" />    
  10.         <Button android:id="@+id/imageClipping" android:layout_height="50dip"    
  11.                 android:text="裁剪图片" android:layout_width="150dip"/>     
  12.  </LinearLayout>                         
  13.   
  14. <pre name="code" class="java">package com.test;  
  15. import java.io.ByteArrayOutputStream;  
  16. import java.io.File;  
  17. import java.io.FileOutputStream;  
  18. import java.io.IOException;  
  19. import android.app.Activity;  
  20. import android.content.Intent;  
  21. import android.graphics.Bitmap;  
  22. import android.graphics.drawable.BitmapDrawable;  
  23. import android.graphics.drawable.Drawable;  
  24. import android.net.Uri;  
  25. import android.os.Bundle;  
  26. import android.os.Environment;  
  27. import android.provider.MediaStore;  
  28. import android.util.Log;  
  29. import android.view.View;  
  30. import android.view.View.OnClickListener;  
  31. import android.widget.Button;  
  32. import android.widget.ImageView;  
  33. import android.widget.Toast;  
  34. public class MainActivity   extends Activity {    
  35. public static final int PHOTOZOOM = 2; // 缩放    
  36. public static final int PHOTORESOULT = 3;// 结果  
  37. private String fileName=Environment.getExternalStorageDirectory().getAbsolutePath()+"/temp.jpeg";  
  38. public static final String IMAGE_UNSPECIFIED = "image/*";    
  39. ImageView imageView = null;    
  40. Button imageClippingBtnnull;    
  41. @Override    
  42. public void onCreate(Bundle savedInstanceState) {    
  43.     super.onCreate(savedInstanceState);    
  44.     setContentView(R.layout.main);    
  45.   
  46.     imageView = (ImageView) findViewById(R.id.imageID);    
  47.     imageClippingBtn= (Button) findViewById(R.id.imageClipping);    
  48.     imageClippingBtn.setOnClickListener(new OnClickListener() {    
  49.         @Override    
  50.         public void onClick(View v) {    
  51.             Drawable d=imageView.getDrawable();  
  52.             Bitmap bitmap=((BitmapDrawable)d).getBitmap();  
  53.             saveMyBitmap(fileName, bitmap);  
  54.             Uri uri=Uri.fromFile(new File(fileName));  
  55.             startPhotoZoom(uri);  
  56.       
  57.       }    
  58.     });    
  59. }    
  60.   
  61. @Override    
  62. protected void onActivityResult(int requestCode, int resultCode, Intent data) {    
  63.     // 处理结果    
  64.     if (requestCode == PHOTORESOULT) {    
  65.         Bundle extras = data.getExtras();    
  66.         if (extras != null) {    
  67.             Bitmap photo = extras.getParcelable("data");    
  68.             ByteArrayOutputStream stream = new ByteArrayOutputStream();    
  69.             photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0 - 100)压缩文件    
  70.             imageView.setImageBitmap(photo);    
  71.         }    
  72.   
  73.     }    
  74.   
  75.     super.onActivityResult(requestCode, resultCode, data);    
  76. }    
  77. //图片裁剪方法  
  78. public void startPhotoZoom(Uri uri) {    
  79.     Intent intent = new Intent("com.android.camera.action.CROP");    
  80.     intent.setDataAndType(uri, IMAGE_UNSPECIFIED);    
  81.     intent.putExtra("crop", "true");    
  82.     // aspectX aspectY 是宽高的比例    
  83.     intent.putExtra("aspectX", 1);    
  84.     intent.putExtra("aspectY", 1);    
  85.     // outputX outputY 是裁剪图片宽高    
  86.     intent.putExtra("outputX", 64);    
  87.     intent.putExtra("outputY", 64);    
  88.     intent.putExtra("return-data", true);    
  89.     startActivityForResult(intent, PHOTORESOULT);    
  90. }   
  91. //把bitmap保存为文件  
  92. public void saveMyBitmap(String fileName,Bitmap mBitmap){  
  93.     File f =null;   
  94.     FileOutputStream fOut = null;  
  95.     try {  
  96.              Log.e("MainActivity", "fileName:"+fileName);  
  97.              f=new File(fileName);  
  98.              f.createNewFile();  
  99.              fOut = new FileOutputStream(f);  
  100.              mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);  
  101.     } catch (Exception e) {  
  102.             e.printStackTrace();  
  103.     }  
  104.     try {  
  105.             fOut.flush();  
  106.     } catch (Exception e) {  
  107.             e.printStackTrace();  
  108.     }  
  109.     try {  
  110.            fOut.close();  
  111.     } catch (IOException e) {  
  112.             e.printStackTrace();  
  113.     }  
  114. }  

相关内容