zoukankan      html  css  js  c++  java
  • 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);
                }
            }
        }
  • 相关阅读:
    我的vim开发环境搭建:C/C++/Go,持续更新中
    MFC的组合框(ComboBox)控件切换下拉样式
    回顾下杂乱的10月
    C++将整型数据转换成大端或小端存储顺序
    C/C++动态分配连续空间,下标越界导致的free():invalid next size问题
    O(n)空间复杂度,打印杨辉三角形的前n行
    C指针笔试题,蛋疼的多重指针运算,谭浩强的阴影
    2017滴滴出行笔试题:异或和为0的最大区间个数
    manjaro安装
    关于top命令
  • 原文地址:https://www.cnblogs.com/java-g/p/4177380.html
Copyright © 2011-2022 走看看