我在如何根据设备分辨率缩小位图时遇到问题,因此设备不会提供 outofmemory异常。
图片即将来自服务器。
假设我的位图具有良好的xxx-hdpi分辨率,但该位图太大了hdpi resloution设备,所以我想要的是根据运行时的屏幕重新缩放来缩小该位图。
我见过一些解决方案
How to scale an image down in android
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
但是这些解决方案不像我想要的那样工作
帮助和提示将得到赞赏。感谢。
答案 0 :(得分:0)
假设您知道如何缩减Bitmap
。所以你只需要知道你应该缩小某个图像的尺寸。您可以使用类似的东西来确定设备屏幕大小(通常我在Application
类中执行此操作):
displayMetrics = getApplicationContext().getResources().getDisplayMetrics();
displayDensity = displayMetrics.densityDpi;
displayHeight = displayMetrics.heightPixels;
displayWidth = displayMetrics.widthPixels;
现在由您自行决定应用允许的最大图片尺寸为displayHeight
和displayWidth
值。
如果您想全屏显示图像,可以将最大图像边尺寸设置为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(Picasso,Fresco,UIL)这样的lib来摆脱这样的思想。让lib来决定。