根据设备分辨率缩小位图 Android

Scale down Bitmap according to Device Resolution Android

我遇到了一个问题,关于如何根据设备分辨率缩小位图,以便设备不会出现 内存不足异常。

图片来自服务器。

假设我有适合 xxx-hdpi 分辨率的位图,但该位图对于 hdpi 分辨率设备来说太大了,所以我想要的是根据运行时的屏幕分辨率缩小该位图。

我看到了一些解决方案

How to scale an image down in android

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

但是这些解决方案并不像我想要的那样工作

帮助和提示将不胜感激。谢谢

假设您知道如何缩小Bitmap。所以你只需要知道你应该将某个图像缩小到哪个尺寸。您可以使用类似这样的方法来确定设备屏幕尺寸(通常我在 Application class 中这样做):

displayMetrics =  getApplicationContext().getResources().getDisplayMetrics();
displayDensity = displayMetrics.densityDpi;
displayHeight = displayMetrics.heightPixels;
displayWidth =  displayMetrics.widthPixels;

现在由您根据 displayHeightdisplayWidth 值决定您的应用允许的最大图像大小。
如果你想全屏显示你的图像,你可以将最大图像边尺寸设置为 displayHeight/2(实际上你应该确定最大的屏幕边尺寸,对于智能手机通常是高度)。
如果你想在列表中显示一些预览,你应该将预览的图像边大小限制为 displayWidth/3(你应该再次确定最小的屏幕尺寸,对于智能手机通常是宽度)。
我有这样的方法(确定最大允许的 ListView 图像边尺寸,以 px 为单位):

public static int getDeviceMaxSideSizeByDensity(){
    int maxSideSize=128;
    if (isHiResDisplay!=null)
    {
        switch (displayDensity) {
            case 120:
                maxSideSize = 64;
                break;
            case 160:
                maxSideSize = 96;
                break;
            case 240:
                maxSideSize = 128;
                break;
            case 320:
                maxSideSize = 256;
                break;
            default:
                maxSideSize = 512;
                break;
        }
    }
    return maxSideSize;
}

您可以设置其他值,更大或更小,再次由您决定。
我建议你使用像 Glide (Picasso, Fresco, UIL) 这样的库来摆脱这种想法。让图书馆来决定。