java - 在 Android 中裁剪和调整图像大小

标签 java android image bitmap

我正在从磁盘读取图像并将其显示在 ListView 的一行内。图像文件大于行的 ImageView 中需要显示的文件。由于我需要将 位图 缓存在 RAM 中以加快访问速度,因此我希望它们仅与 ImageView 一样大(85x85 dip)

现在我正在阅读文件

bitmap = BitmapFactory.decodeFile(file);

ImageView负责缩放和裁剪

android:scaleType="centerCrop"

据我所知,这是将整个位图保存在内存中(因为我将其缓存 XD),这很糟糕

我怎样才能从 ImageView 中删除这个责任并在加载文件时进行裁剪 + 缩放?所有位图都将以 85x85 倾角显示,需要“centerCrop”

最佳答案

您可以在加载、裁剪和缩放之前找出图片的尺寸:


BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;

    Bitmap bmo = BitmapFactory.decodeFile(file.getAbsolutePath(), options);

然后以样本大小加载它:


...
options.inSampleSize = 1/2;
bmo = BitmapFactory.decodeFile(file.getAbsolutePath(), options);

...
 = Bitmap.createScaledBitmap(bmo, dW, dH, false);

不要忘记回收临时位图,否则你会得到 OOME。


bmo.recycle();

关于java - 在 Android 中裁剪和调整图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4579499/

相关文章:

java - MST 被映射到 joda 中的丹佛时区,目前是 MDT。这是 joda DateTimeZone 中的错误吗?

android - 在 map fragment 中添加按钮?

android - 以编程方式断开任何 VPN 服务

javascript - 如何将指向所有图像的链接包装在一个 div 中?

html - 图像溢出边界

java - 了解 Selenium 中的 findElement 方法

java - 如何使用java执行shell脚本

java - 每个动态日志记录类别可插入附加程序?

java - 将 LibGDX 与 Android 首选项一起使用

C 将 BMP 文件大小调整为 N 倍,我做错了什么?