• android 选择图片或拍照时旋转了90度问题


    由于前面的博文中忽略了点内容,所以在这里补上,下面内容就是解决拍照或者选择图片显示的时候图片旋转了90度或者其他度数问题,以便照片可以正面显示:具体如下:

    首先直接看上面博文下的拍完照或者选完图后处理部分:

    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
            switch (resultCode) {
            case 1:
                if (data != null) {
                    // 取得返回的Uri,基本上选择照片的时候返回的是以Uri形式,但是在拍照中有得机子呢Uri是空的,所以要特别注意
                    Uri mImageCaptureUri = data.getData();
                    // 返回的Uri不为空时,那么图片信息数据都会在Uri中获得。如果为空,那么我们就进行下面的方式获取
                    if (mImageCaptureUri != null) {
                        setImage(mImageCaptureUri);// 根据Uri处理并显示图片
                    }
                }
                break;
            default:
                break;
    
            }
        }

    第二:处理90度问题并显示:

        private void setImage(Uri mImageCaptureUri) {
    
            // 不管是拍照还是选择图片每张图片都有在数据中存储也存储有对应旋转角度orientation值
            // 所以我们在取出图片是把角度值取出以便能正确的显示图片,没有旋转时的效果观看
    
            ContentResolver cr = this.getContentResolver();
            Cursor cursor = cr.query(mImageCaptureUri, null, null, null, null);// 根据Uri从数据库中找
            if (cursor != null) {
                cursor.moveToFirst();// 把游标移动到首位,因为这里的Uri是包含ID的所以是唯一的不需要循环找指向第一个就是了
                String filePath = cursor.getString(cursor.getColumnIndex("_data"));// 获取图片路径
                String orientation = cursor.getString(cursor
                        .getColumnIndex("orientation"));// 获取旋转的角度
                cursor.close();
                if (filePath != null) {
                    Bitmap bitmap = BitmapFactory.decodeFile(filePath);//根据Path读取资源图片
                    int angle = 0;
                    if (orientation != null && !"".equals(orientation)) {
                        angle = Integer.parseInt(orientation);
                    }
                    if (angle != 0) {
                        // 下面的方法主要作用是把图片转一个角度,也可以放大缩小等
                        Matrix m = new Matrix();
                        int width = bitmap.getWidth();
                        int height = bitmap.getHeight();
                        m.setRotate(angle); // 旋转angle度
                        bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height,
                                m, true);// 从新生成图片
                        
                    }
                    photo.setImageBitmap(bitmap);
                }
            }
        }
  • 相关阅读:
    获取随机图片
    依靠前端解决跨域问题的几种方式
    浅谈什么是前端BFC
    script标签中defer和async的区别
    nodejs学习笔记(一):centos7安装node环境
    深入浅出之js闭包知识点梳理(一)
    js实现防抖函数和节流函数
    前端flex布局学习笔记
    es6 之class介绍
    localstorage实现两个页面通信,购物车原理。
  • 原文地址:https://www.cnblogs.com/java-g/p/4177380.html
Copyright © 2020-2023  润新知