从服务器调整图像大小

时间:2013-08-04 21:01:07

标签: android bitmap

我的应用程序通过HTTP从服务器加载图像并将其保存到文件中。然后我使用此代码获取Drawable并查看它:

File f=new File(path);
if(f.exists()) {
    Bitmap bmp = BitmapFactory.decodeFile(f.getAbsolutePath());
    if(bmp!=null) {
        DisplayMetrics dm = m_activity.getResources().getDisplayMetrics();
        bmp.setDensity(dm.densityDpi);
        Drawable drawable=new BitmapDrawable(context.getResources(), bmp);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        return drawable;
    }
}

它在三星Galaxy S2上运行良好。但在三星Galaxy S4上这个图像太小了。例如:

在S2:

SGS2

在S4:

SGS4

我需要在具有各种显示分辨率的所有设备上均匀显示它。可能吗?如何实现这个?

3 个答案:

答案 0 :(得分:1)

我想我可以帮助你。我自己也有同样的问题。您需要做的是找到这个新屏幕比旧屏幕大多少,首先获取设备的尺寸,然后将它们放入widthOfStandardDevice和heightOfStandardDevice.Ance你知道新屏幕比旧屏幕大了多少,你会制作两个乘数来乘以一切。您现在可以说将位图的大小设置为bitmap_width和bitmap_height。

DisplayMetrics displaymetrics = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);

height = displaymetrics.heightPixels;

width = displaymetrics.widthPixels;

float widthMultiplier = width/widthOfStandardDevice;

float heightMultiplier = height/heightOfStandardDevice;

int bitmap_width = (int)(600 * widthMultiplier);

int bitmap_height = (int)(800 * heightMultiplier);

答案 1 :(得分:1)

基本问题是分辨率较高的设备会使图像看起来更小。您需要按照设备分辨率按比例缩放“固有”大小。

一个好的解决方案(正如Sheldon建议的那样)是使用Scaled Bitmap

答案 2 :(得分:1)

您不必缩放位图,因为将其缩放将意味着它将使用更多内存。

相反,您可以告诉imageView您希望它有多大,并让它以您希望的大小显示位图(使用dp)。

如果您希望自己设置位图大小,请查看this link图片质量是否重要,如果速度更重要,请查看this link