图片裁剪_如何裁剪某张图片的某一部分

本文介绍了如何从手机相册中选择一张图片,通过系统提供的活动来显示图片缩略图并选择图片。接着,利用裁剪功能调整图片尺寸,并保存修改后的图片,最后可以通过发送或上传到微博等方式分享给好友。


需求分析:想从相册中获取某张图片,并对图片进行裁剪,然后保存,并发给好友,或上传到微博;


实现思路:

选择图片,通过系统相册启动Activity去显示图片缩略图,并选择图片;

裁剪图片,通过系统相册处理裁剪的Activity去执行;


实现步骤:

1.选择图片  和如何对图片进行缩放是一样的;

2.裁剪图片 通过调用系统的Activity去裁剪;


关键:

 拿到系统应用的源码,查看清单文件,去配置Intent,通过查看对应Activity的源码,看看是如何传递图片给activity,又是如何返回图片;


code:

import java.io.File;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcelable;
import android.view.View;
import android.widget.ImageView;

public class LoadImage2Activity extends Activity {
    private ImageView iv;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        iv =(ImageView) findViewById(R.id.iv);
    }
   

    //加载
    public void loadImage(View view){
        long starttime = System.currentTimeMillis();
        //Bitmap bitmap  =BitmapFactory.decodeFile("/sdcard/img.JPG");
        BitmapFactory.Options opts = new Options(); //定义图片的解析的参数对象
        opts.inSampleSize = 8; //按照原图的1/8进行图片的解析
       

        //对图片文件进行解码生成位图;也可以通过调用系统的图片浏览应用去获取图片;
        Bitmap bitmap  = BitmapFactory.decodeFile("/sdcard/img.JPG", opts);
        
        long endtime = System.currentTimeMillis();
        long time = endtime - starttime;
        System.out.println("解析图片花费了:"+time);
        iv.setImageBitmap(bitmap);
    }
   

    //裁剪
    public void cropImage(View view){
        Intent intent = new Intent();
        
        Bundle myExtras = new Bundle();
        myExtras.putBoolean("return-data", true);
        intent.putExtras(myExtras);

        //对意图的目的地进行指明;
        intent.setAction("com.android.camera.action.CROP");
        intent.addCategory("android.intent.category.DEFAULT");
//        intent.setData(Uri.fromFile(new File("sdcard/img.JPG")));
//        intent.setType("image/*");

       //对意图的携带数据进行uri 和 type进行指定;
        intent.setDataAndType(Uri.fromFile(new File("sdcard/img.JPG")),"image/*");
        startActivityForResult(intent, 0);
    }
   

    //返回当前界面时,把“data”对应的Object,强转成Bitemap,并设置到界面上去显示;
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

      
        if(data!=null){
            Parcelable imagedata  =  (Parcelable) data.getExtras().get("data");
            iv.setImageBitmap((Bitmap) imagedata);
            
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值