首页后端开发其他后端知识Android中ImageView显示图片不正怎么解决

Android中ImageView显示图片不正怎么解决

时间2024-03-28 11:30:03发布访客分类其他后端知识浏览570
导读:这篇文章给大家分享的是“Android中ImageView显示图片不正怎么解决”,文中的讲解内容简单清晰,对大家认识和了解都有一定的帮助,对此感兴趣的朋友,接下来就跟随小编一起了解一下“Android中ImageView显示图片不正怎么解决...
这篇文章给大家分享的是“Android中ImageView显示图片不正怎么解决”,文中的讲解内容简单清晰,对大家认识和了解都有一定的帮助,对此感兴趣的朋友,接下来就跟随小编一起了解一下“Android中ImageView显示图片不正怎么解决”吧。

在Android中使用ImageView显示图片的时候发现图片显示不正,方向偏了或者倒过来了。解决这个问题很自然想到的两步走,首先是要自动识别图像方向,计算旋转角度,然后对图像进行旋转并显示。


一、识别图像方向

首先在这里提一个概念EXIF(Exchangeable Image File Format,可交换图像文件),具体解释参见Wiki。简而言之,Exif是一个标准,用于电子照相机(也包括手机、扫描器等)上,用来规范图片、声音、视屏以及它们的一些辅助标记格式。


Exif支持的格式如下:

图像

压缩图像文件:JPEG、DCT 不支持:JPEG 2000、PNG、GIF

非压缩图像文件:TIFF


音频

RIFF、WAV


Android提供了对JPEG格式图像Exif接口支持,可以读取JPEG文件metadata信息,参见ExifInterface。这些Metadata信息总的来说大致分为三类:日期时间、空间信息(经纬度、高度)、Camera信息(孔径、焦距、旋转角、曝光量等等)。


二、图像旋转

Android中提供了对Bitmap进行矩阵旋转的操作,参见Bitmap提供的静态createBitmap方法。

public static Bitmap createBitmap (Bitmap source, 
                                   int x, int y, 
                                   int width, 
                                   int height, 
                                   Matrix m, 
                                   boolean filter);


到此这两个问题理论上都解决了,开始实际操作一下吧,参照以下代码。

public class IOHelper {

    
    
    /** 从给定路径加载图片*/
    public static Bitmap loadBitmap(String imgpath) {
    
        return BitmapFactory.decodeFile(imgpath);

    }


    
    /** 从给定的路径加载图片,并指定是否自动旋转方向*/
    public static Bitmap loadBitmap(String imgpath, boolean adjustOritation) {

        if (!adjustOritation) {
    
            return loadBitmap(imgpath);

        }
 else {
    
            Bitmap bm = loadBitmap(imgpath);
    
            int digree = 0;
    
            ExifInterface exif = null;

            try {
    
                exif = new ExifInterface(imgpath);

            }
 catch (IOException e) {
    
                e.printStackTrace();
    
                exif = null;

            }

            if (exif != null) {
    
                // 读取图片中相机方向信息
                int ori = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,
                        ExifInterface.ORIENTATION_UNDEFINED);

                // 计算旋转角度
                switch (ori) {
    
                case ExifInterface.ORIENTATION_ROTATE_90:
                    digree = 90;
    
                    break;
    
                case ExifInterface.ORIENTATION_ROTATE_180:
                    digree = 180;
    
                    break;
    
                case ExifInterface.ORIENTATION_ROTATE_270:
                    digree = 270;
    
                    break;
    
                default:
                    digree = 0;
    
                    break;

                }

            }

            if (digree != 0) {
    
                // 旋转图片
                Matrix m = new Matrix();
    
                m.postRotate(digree);
    
                bm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(),
                        bm.getHeight(), m, true);

            }
    
            return bm;

        }

    }


}
    


若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


以上就是关于“Android中ImageView显示图片不正怎么解决”的相关知识,感谢各位的阅读,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注网络,小编每天都会为大家更新不同的知识。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Android中ImageView显示图片不正怎么解决
本文地址: https://pptw.com/jishu/654910.html
PHP类的自动加载怎么理解 Bootstrap怎么实现警告框,可关闭警告框不同在在哪

游客 回复需填写必要信息