关于ImageView小于图片尺寸时会显示模糊现象

本文探讨了Android中ImageView在图片尺寸调整时出现的模糊问题,指出缩放操作可能导致像素丢失,解释了为何不按预期变得更清晰,并提供了优化resize的代码实例。核心结论是图片大小与显示大小差异影响清晰度,缩小和放大都会导致模糊,建议使用类似PS锐化处理来改善。
摘要由CSDN通过智能技术生成

忽然发现一个问题,ImageView小于图片尺寸时会显示模糊现象,这个可能不怎么留意到,照理说缩小后像素密集了应该清楚,主观印象是这样,但是实际上却不是这样。这里记录一下。

转载注明本文来源https://editor.csdn.net/md/?articleId=116294062

同个图片在不同尺寸图片控件下显示效果

在这里插入图片描述
可以得出,越接近图片尺寸,显示越清晰,过大过小都会导致模糊

缩小图片bitmap后显示

在这里插入图片描述
看得出,效果是一样的,都会模糊。bitmap缩小本质会对图片质量有损,模糊是正常的。照理说缩小后像素密集了应该清楚,但其实不是。缩小后单位面积仍然只能显示固定数量的像素,所以其实并没有更密集这么一说。那么如果你缩了50%,实际上有一半的像素被扔掉了

android 图片处理 resize 探秘

参考文章:https://blog.csdn.net/jpl1880/article/details/84563084
根据相关的方法等比压缩对图片resize 操作优化

public static  Bitmap getResizedBitmap(Bitmap bitmap,float newWidth, float newHeight) {
        if (bitmap.getHeight()>bitmap.getWidth()){
            newHeight=300f;
            newWidth= (int) (bitmap.getWidth()*(newHeight/(float) bitmap.getHeight()));
        }else{
            newWidth=300f;
            newHeight= (int) (bitmap.getHeight()*(newWidth/(float) bitmap.getWidth()));
        }

        Bitmap resizedBitmap = Bitmap.createBitmap((int)newWidth,(int) newHeight, Bitmap.Config.ARGB_8888);


        float scaleX = newWidth / (float) bitmap.getWidth();
        float scaleY = newHeight / (float) bitmap.getHeight();
        float pivotX = 0;
        float pivotY = 0;

        Matrix scaleMatrix = new Matrix();
        scaleMatrix.setScale(scaleX, scaleY, pivotX, pivotY);
        Canvas canvas = new Canvas(resizedBitmap);
        canvas.setMatrix(scaleMatrix);
        canvas.drawBitmap(bitmap, 0, 0, new Paint(Paint.FILTER_BITMAP_FLAG |
                Paint.DITHER_FLAG |
                Paint.ANTI_ALIAS_FLAG));

        return resizedBitmap;
    }

在这里插入图片描述

结论

只要是显示大小不等于图片大小,必定会模糊,原因是设备的像素密度是固定的,放大必定模糊,而缩小像素丢失也必定模糊,没有很好的办法,图片大小与显示大小差别越大越模糊。优化方式可以参考ps的锐化等算法处理。一般而言,缩小看起来模糊感官更不明显些。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值