拍照相册完美解决失真问题

package com.example.kjdskjf;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.MediaStore;
import android.provider.MediaStore.MediaColumns;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.widget.Toast;

public class PhotoUtil {
	private static final File pubFile = MyApplication.getAppContext()
			.getExternalFilesDir(Environment.DIRECTORY_PICTURES);
	
	public static final File file1 = new File(pubFile, "temp1.jpg");// 拍照路径
	public static final File file2 = new File(pubFile, "temp2.jpg");// 剪裁路径
	public static final File file3 = new File(pubFile, "temp3.jpg");// 压缩路径

	/**
	 * 返回码
	 */
	public static final int NONE = 0;
	/**
	 * 拍照
	 */
	public static final int PHOTOGRAPH = 1;
	/**
	 * 相册
	 */
	public static final int PHOTOALBUM = 2;
	/**
	 * 剪裁
	 */
	public static final int CLIPPING = 3;

	/**
	 * @param activity
	 *            吊起相册或拍照
	 */
	public static void getPhoto(final Activity activity) {
		final CharSequence[] items = { "相册", "拍照" };
		AlertDialog dlg = new AlertDialog.Builder(activity).setTitle("选择图片")
				.setItems(items, new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int item) {
						if (item == 1) {
							Log.i("aini", "调用系统相机");
							Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");
							getImageByCamera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file1));
							activity.startActivityForResult(getImageByCamera, PHOTOGRAPH);
						} else {
							Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);
							getImage.addCategory(Intent.CATEGORY_OPENABLE);
							getImage.setType("image/jpeg");
							activity.startActivityForResult(getImage, PHOTOALBUM);
						}
					}
				}).create();
		dlg.show();
	}

	/**
	 * 调起拍照
	 */
	public static void takePhoto(Activity activity) {
		Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");
		getImageByCamera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file1));
		activity.startActivityForResult(getImageByCamera, PHOTOGRAPH);
	}

	/**
	 * 调起相册
	 */
	public static void pickPhoto(Activity activity) {
		Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);
		getImage.addCategory(Intent.CATEGORY_OPENABLE);
		getImage.setType("image/jpeg");
		activity.startActivityForResult(getImage, PHOTOALBUM);
	}

	/**
	 * 拍照返回调用
	 */
	public static void onPhotoFromCamera(Activity activity) {
		startPhotoZoom(Uri.fromFile(file1), activity);
	}

	/**
	 * 相册返回调用
	 */
	public static void onPhotoFromPick(Activity activity, Uri uri) {
		startPhotoZoom(uri, activity);
	}

	/**
	 * @param compress
	 *            0``100 100表示原图 返回剪裁的图片
	 */
	public static Bitmap getBitmap(int compress) {
		try {
			Bitmap bm = BitmapFactory.decodeFile(file2.getAbsolutePath());
			OutputStream outStream = new FileOutputStream(file3);
			bm.compress(android.graphics.Bitmap.CompressFormat.JPEG, compress, outStream);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		return BitmapFactory.decodeFile(file3.getAbsolutePath());
	}

	public static void startPhotoZoom(Uri uri, Activity activity) {
		Intent intent = new Intent("com.android.camera.action.CROP");
		intent.setDataAndType(uri, "image/*");
		intent.putExtra("crop", "true");
		// aspectX aspectY 是宽高的比例
		intent.putExtra("aspectX", 1);
		intent.putExtra("aspectY", 1);
		intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file2));
		// outputX outputY 是裁剪图片宽高
		// intent.putExtra("outputX", 100);
		// intent.putExtra("outputY", 100);
		intent.putExtra("return-data", false);
		activity.startActivityForResult(intent, CLIPPING);
	}

	/*
	 * 用的activity调用这个
		@Override
		protected void onActivityResult(int requestCode, int resultCode, Intent data) {
			if (resultCode == PhotoUtil.NONE)
				return;
			if (requestCode == PhotoUtil.PHOTOALBUM) {
				PhotoUtil.onPhotoFromPick(this, data.getData());
			} else if (requestCode == PhotoUtil.PHOTOGRAPH) {
				PhotoUtil.onPhotoFromCamera(this);
			} else if (requestCode == PhotoUtil.CLIPPING) {
				Bitmap bitmap = PhotoUtil.getBitmap(100);
				imageView.setImageBitmap(bitmap);
			}
		}
	 */

	/*
	 * 用的fragment的activity调用这个
	 * 解决fragment不能接到intent问题
	 * 
		@Override
		protected void onActivityResult(int requestCode, int resultCode, Intent data) {
			myfragment.onActivityResult(int requestCode, int resultCode, Intent data){};
		}
	 */
	
	
	/* 
	 * Appication中写如下代码
	 * 
	  private static Context context; 

	    public void onCreate(){ 
	        super.onCreate(); 
	        MyApplication.context = getApplicationContext(); 
	    } 

	    public static Context getAppContext() { 
	        return MyApplication.context; 
	    } 
	    
	    */

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值