根据设备分辨率缩小位图 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;
现在由您根据 displayHeight
和 displayWidth
值决定您的应用允许的最大图像大小。
如果你想全屏显示你的图像,你可以将最大图像边尺寸设置为 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) 这样的库来摆脱这种想法。让图书馆来决定。
我遇到了一个问题,关于如何根据设备分辨率缩小位图,以便设备不会出现 内存不足异常。
图片来自服务器。
假设我有适合 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;
现在由您根据 displayHeight
和 displayWidth
值决定您的应用允许的最大图像大小。
如果你想全屏显示你的图像,你可以将最大图像边尺寸设置为 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) 这样的库来摆脱这种想法。让图书馆来决定。