调用系统相机 或 相册 获得图片

不知道选错了什么,刚才编辑的文章一片乱码,,,重新来一次

本篇文章包括  1 调用系统相机相册 返回图片 

                          2 返回图片显示 反转90°的解决办法

调用系统相机 或者 相册来 获取图片是一个比较经常遇到的问题,简单整理下,发上来

1 创建 文件夹,一般会为本应用创建一个文件夹,我们的图片也保存在该文件夹下

       权限:

	<!-- 在SDCard中创建与删除文件权限 -->
	<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
	<!-- 往SDCard写入数据权限 -->
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
       代码:

            

        File tmpFile = new File(PublicContants.file_header);
        if (!tmpFile.exists()) {
                tmpFile.mkdir();
        }

2  从相机或者系统相册获取图片

      权限:

	<!-- 调用相机和 相册的权限 -->
	<uses-permission android:name="android.permission.CAMERA"/>
	<uses-feature android:name="android.hardware.camera"/>
	<uses-feature android:name="android.hardware.camera.autofocus"/>
      ---------------相机----------------

      调用:

        Intent intent = new Intent(  
                MediaStore.ACTION_IMAGE_CAPTURE);  
        //下面这句指定调用相机拍照后的照片存储的路径  
		String name = DateFormat.format("yyyyMMdd_hhmmss",  
                Calendar.getInstance(Locale.CHINA))  
                + ".jpg";  
		takePicFile = new File(PublicContants.file_header+"/diary_pic_"+name+".jpg");
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri  
                .fromFile(takePicFile));  
        startActivityForResult(intent, PublicContants.select_pic_from_take_pic_request_code);  
     返回:

            在 OnActivityResult()中可以对刚才定义的文件进行读取操作

  ------------------相册---------------------

   调用:

        Intent intent = new Intent(Intent.ACTION_PICK, null);
		intent.setDataAndType(  
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,  
                "image/*");  
        startActivityForResult(intent, PublicContants.select_pic_from_sys_request_code); 
    返回:在 OnActivityResult()中

        if(data != null){
		Uri uri = data.getData(); 
		Cursor cursor = this.getContentResolver().query(uri, null, 
								null, null, null); 
		cursor.moveToFirst(); 
//		String imgNo = cursor.getString(0); // 图片编号 
		String imgPath = cursor.getString(1); // 图片文件路径 
//		String imgSize = cursor.getString(2); // 图片大小 
//		String imgName = cursor.getString(3); // 图片文件名 
		cursor.close(); 

	}

ok,至此,已经可以将 得到的图片返回了,但是有一个问题,将得到的图片 在imageView控件上显示 竟然反转了90 °,,尼玛,,不用担心,我们有banfa

public class BitmapTool {
	private BitmapTool(){}
	private static BitmapTool tool;
	public static BitmapTool getInstance(){
		if(tool == null){
			init();
		}
		return tool;
	}
	private static synchronized void init(){
		tool = new BitmapTool();
	}
	
	/**
	 * 读取图片属性:旋转的角度
	 * @param path 图片绝对路径
	 * @return degree旋转的角度
	 */
    private int readPictureDegree(String path) {
        int degree  = 0;
        try {
                ExifInterface exifInterface = new ExifInterface(path);
                int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
                switch (orientation) {
                case ExifInterface.ORIENTATION_ROTATE_90:
                        degree = 90;
                        break;
                case ExifInterface.ORIENTATION_ROTATE_180:
                        degree = 180;
                        break;
                case ExifInterface.ORIENTATION_ROTATE_270:
                        degree = 270;
                        break;
                }
        } catch (IOException e) {
                e.printStackTrace();
        }
        return degree;
    }
   /*
    * 旋转图片 
    * @param angle 
    * @param bitmap 
    * @return Bitmap 
    */  
   public Bitmap getCorrectRotateBitmap(String path) {
	   int angle = readPictureDegree(path);
	   Bitmap bitmap = BitmapFactory.decodeFile(path);
       //旋转图片 动作   
       Matrix matrix = new Matrix();;  
       matrix.postRotate(angle);  
       // 创建新的图片   
       Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,  
               bitmap.getWidth(), bitmap.getHeight(), matrix, true);  
       return resizedBitmap;  
   }

}

通过 该工具类调用 产生的bitmap 就可以 正常显示了

   

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值