android应用中图片的裁剪

本文介绍了一种在Android应用中实现图片裁剪的方法,并通过一个具体示例详细讲解了如何将相册中的照片裁剪并设置为用户头像的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在做android应用时,经常要用到图片的裁剪,下面以把相册里的照片设置为用户头像来解释android中如何实现裁剪。
<?xml version="1.0" encoding="utf-8"?>  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:orientation="vertical" android:layout_width="fill_parent"  
        android:layout_height="fill_parent">  
        <ImageView android:id="@+id/imageID"  
            android:adjustViewBounds="true" 
            android:src="@drawable/shan" 
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content" />  
        <Button android:id="@+id/imageClipping" android:layout_height="50dip"  
                android:text="裁剪图片" android:layout_width="150dip"/>   
 </LinearLayout>                       

package com.test;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity   extends Activity {  
public static final int PHOTOZOOM = 2; // 缩放  
public static final int PHOTORESOULT = 3;// 结果
private String fileName=Environment.getExternalStorageDirectory().getAbsolutePath()+"/temp.jpeg";
public static final String IMAGE_UNSPECIFIED = "image/*";  
ImageView imageView = null;  
Button imageClippingBtn= null;  
@Override  
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  

    imageView = (ImageView) findViewById(R.id.imageID);  
    imageClippingBtn= (Button) findViewById(R.id.imageClipping);  
    imageClippingBtn.setOnClickListener(new OnClickListener() {  
        @Override  
        public void onClick(View v) {  
        	Drawable d=imageView.getDrawable();
        	Bitmap bitmap=((BitmapDrawable)d).getBitmap();
        	saveMyBitmap(fileName, bitmap);
        	Uri uri=Uri.fromFile(new File(fileName));
        	startPhotoZoom(uri);
    
      }  
    });  
}  

@Override  
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    // 处理结果  
    if (requestCode == PHOTORESOULT) {  
        Bundle extras = data.getExtras();  
        if (extras != null) {  
            Bitmap photo = extras.getParcelable("data");  
            ByteArrayOutputStream stream = new ByteArrayOutputStream();  
            photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0 - 100)压缩文件  
            imageView.setImageBitmap(photo);  
        }  

    }  

    super.onActivityResult(requestCode, resultCode, data);  
}  
//图片裁剪方法
public void startPhotoZoom(Uri uri) {  
    Intent intent = new Intent("com.android.camera.action.CROP");  
    intent.setDataAndType(uri, IMAGE_UNSPECIFIED);  
    intent.putExtra("crop", "true");  
    // aspectX aspectY 是宽高的比例  
    intent.putExtra("aspectX", 1);  
    intent.putExtra("aspectY", 1);  
    // outputX outputY 是裁剪图片宽高  
    intent.putExtra("outputX", 64);  
    intent.putExtra("outputY", 64);  
    intent.putExtra("return-data", true);  
    startActivityForResult(intent, PHOTORESOULT);  
} 
//把bitmap保存为文件
public void saveMyBitmap(String fileName,Bitmap mBitmap){
    File f =null; 
    FileOutputStream fOut = null;
    try {
    	     Log.e("MainActivity", "fileName:"+fileName);
    	     f=new File(fileName);
    	     f.createNewFile();
             fOut = new FileOutputStream(f);
             mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
    } catch (Exception e) {
            e.printStackTrace();
    }
    try {
            fOut.flush();
    } catch (Exception e) {
            e.printStackTrace();
    }
    try {
           fOut.close();
    } catch (IOException e) {
            e.printStackTrace();
    }
}





                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幸福在路上wellbeing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值