1.   从相册选择照片进行裁剪
从相册选择照片并裁剪:

/**
 * 从相册选择照片进行裁剪
 */
private void cropfromgallery() {
    // todo auto-generated method stub    
    intent intent=new intent();
    intent.setaction(intent.action_pick);//pick an item from the data
    intent.settype(“image/*”);//从所有图片中进行选择
    intent.putextra(“crop”, “true”);//设置为裁切
    intent.putextra(“aspectx”, 1);//裁切的宽比例
    intent.putextra(“aspecty”, 1);//裁切的高比例
    intent.putextra(“outputx”, 600);//裁切的宽度
    intent.putextra(“outputy”, 600);//裁切的高度
    intent.putextra(“scale”, true);//支持缩放
    intent.putextra(“return-data”, false);
    intent.putextra(mediastore.extra_output, imageuri);//将裁切的结果输出到指定的uri
    intent.putextra(“outputformat”, bitmap.compressformat.jpeg.tostring());//裁切成的图片的格式
    intent.putextra(“nofacedetection”, true); // no face detection
    startactivityforresult(intent, select_pic);   
}

将裁减好的照片显示在显示在imagaview上:

case select_pic:
    if (resultcode==result_ok) {
        try {
            bitmap bitmap=bitmapfactory.decodestream(getcontentresolver().
                    openinputstream(imageuri));//将imageuri对象的图片加载到内存
            imgshow.setimagebitmap(bitmap);
        } catch (filenotfoundexception e) {
            // todo auto-generated catch block
            e.printstacktrace();
        }
    }
    break;

程序运行效果图:

2.   从相机拍取照片进行裁剪
控制相机拍照并将照片保存到指定位置:

/**
 * 从相机拍取照片进行裁剪
 */
private void cropfromtake() {
    // todo auto-generated method stub
    intent intent=new intent();
    intent.setaction(mediastore.action_image_capture);//设置action为拍照
    intent.putextra(mediastore.extra_output, imageuri);//将拍取的照片保存到指定uri
    startactivityforresult(intent, take_pic);
}

裁剪已经排好的照片并显示在imageview上:

case take_pic:
    if (resultcode==result_ok) {
        cropimageuri(imageuri, 600, 600, crop_pic);
    }
    break;

/**
 * 裁剪指定uri对应的照片
 * @param imageuri:uri对应的照片
 * @param outputx:裁剪宽
 * @param outputy:裁剪高
 * @param requestcode:请求码
 */
private void cropimageuri(uri imageuri, int outputx, int outputy, int requestcode){
    intent intent = new intent(“com.android.camera.action.crop”);
    intent.setdataandtype(imageuri, “image/*”);
    intent.putextra(“crop”, “true”);
    intent.putextra(“aspectx”, 1);
    intent.putextra(“aspecty”, 1);
    intent.putextra(“outputx”, outputx);
    intent.putextra(“outputy”, outputy);
    intent.putextra(“scale”, true);
    intent.putextra(mediastore.extra_output, imageuri);
    intent.putextra(“return-data”, false);
    intent.putextra(“outputformat”, bitmap.compressformat.jpeg.tostring());
    intent.putextra(“nofacedetection”, true); // no face detection
    startactivityforresult(intent, requestcode);
}

程序运行效果图:

3.完整项目代码:
 

package com.jph.cp;
 
import java.io.file;
import java.io.filenotfoundexception;
import android.support.v7.app.actionbaractivity;
import android.content.intent;
import android.graphics.bitmap;
import android.graphics.bitmapfactory;
import android.net.uri;
import android.os.bundle;
import android.os.environment;
import android.provider.mediastore;
import android.view.view;
import android.widget.imageview;
 
/**
 * 从相册选择照片进行裁剪,从相机拍取照片进行裁剪
 * @author jph
 * date:2014.10.09
 */
public class mainactivity extends actionbaractivity {
    private final static int select_pic=0x123; 
    private final static int take_pic=0x124; 
    private final static int crop_pic=0x125; 
    private uri imageuri;
    private imageview imgshow;
    @override
    protected void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        setcontentview(r.layout.activity_main);
        //初始化imageuri
        imageuri=uri.fromfile(new file(environment.getexternalstoragedirectory(), "test.jpg"));
        imgshow=(imageview)findviewbyid(r.id.imgshow);
    }
    @override
    protected void onactivityresult(int requestcode, int resultcode, intent data) {
        // todo auto-generated method stub
        switch (requestcode) {
        case select_pic:
            if (resultcode==result_ok) {
                try {
                    bitmap bitmap=bitmapfactory.decodestream(getcontentresolver().
                            openinputstream(imageuri));//将imageuri对象的图片加载到内存
                    imgshow.setimagebitmap(bitmap);
                } catch (filenotfoundexception e) {
                    // todo auto-generated catch block
                    e.printstacktrace();
                }
            }
            break;
        case take_pic:
            if (resultcode==result_ok) {
                cropimageuri(imageuri, 600, 600, crop_pic);
            }
            break;
        case crop_pic:
            if (resultcode==result_ok) {
                try {
                    bitmap bitmap=bitmapfactory.decodestream(getcontentresolver().
                            openinputstream(imageuri));//将imageuri对象的图片加载到内存
                    imgshow.setimagebitmap(bitmap);
                } catch (filenotfoundexception e) {
                    // todo auto-generated catch block
                    e.printstacktrace();
                }
            }
            break;
        default:
            break;
        }
        super.onactivityresult(requestcode, resultcode, data);
    }
    /**
     * 裁剪指定uri对应的照片
     * @param imageuri:uri对应的照片
     * @param outputx:裁剪宽
     * @param outputy:裁剪高
     * @param requestcode:请求码
     */
    private void cropimageuri(uri imageuri, int outputx, int outputy, int requestcode){
        intent intent = new intent("com.android.camera.action.crop");
        intent.setdataandtype(imageuri, "image/*");
        intent.putextra("crop", "true");
        intent.putextra("aspectx", 1);
        intent.putextra("aspecty", 1);
        intent.putextra("outputx", outputx);
        intent.putextra("outputy", outputy);
        intent.putextra("scale", true);
        intent.putextra(mediastore.extra_output, imageuri);
        intent.putextra("return-data", false);
        intent.putextra("outputformat", bitmap.compressformat.jpeg.tostring());
        intent.putextra("nofacedetection", true); // no face detection
        startactivityforresult(intent, requestcode);
    }
 
    public void croppic(view view) {
        switch (view.getid()) {
        case r.id.btncropfromgallery://从相册选择照片进行裁剪
            cropfromgallery();
            break;
        case r.id.btncropfromtake://从相机拍取照片进行裁剪
            cropfromtake();
            break;
 
        default:
            break;
        }
    }
    /**
     * 从相机拍取照片进行裁剪
     */
    private void cropfromtake() {
        // todo auto-generated method stub
        intent intent=new intent();
        intent.setaction(mediastore.action_image_capture);//设置action为拍照
        intent.putextra(mediastore.extra_output, imageuri);//将拍取的照片保存到指定uri
        startactivityforresult(intent, take_pic);
    }
    /**
     * 从相册选择照片进行裁剪
     */
    private void cropfromgallery() {
        // todo auto-generated method stub        
        intent intent=new intent();
        intent.setaction(intent.action_pick);//pick an item from the data
        intent.settype("image/*");//从所有图片中进行选择
        intent.putextra("crop", "true");//设置为裁切
        intent.putextra("aspectx", 1);//裁切的宽比例
        intent.putextra("aspecty", 1);//裁切的高比例
        intent.putextra("outputx", 600);//裁切的宽度
        intent.putextra("outputy", 600);//裁切的高度
        intent.putextra("scale", true);//支持缩放
        intent.putextra("return-data", false);
        intent.putextra(mediastore.extra_output, imageuri);//将裁切的结果输出到指定的uri
        intent.putextra("outputformat", bitmap.compressformat.jpeg.tostring());//裁切成的图片的格式
        intent.putextra("nofacedetection", true); // no face detection
        startactivityforresult(intent, select_pic);    
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。