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



我面临一个问题,即如何根据设备分辨率缩小位图,使设备不会出现内存外异常

图像来自服务器。

假设我有一个xxx hdpi分辨率的位图,但这个位图太大了,所以我想要的是在运行时根据屏幕分辨率缩小位图。

我看过的一些解决方案

如何在android 中缩小图像

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

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

我们将感谢您的帮助和提示。谢谢

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

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

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

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(毕加索、弗雷斯科、UIL)这样的lib来摆脱这种想法。让自由党来决定。

最新更新