【问题标题】:Resizing images from server从服务器调整图像大小
【发布时间】:2013-08-04 21:01:07
【问题描述】:

我的应用程序通过 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 上:

在 S4 上:

我需要在具有不同显示器分辨率的所有设备上平等地显示它。是否可以?如何实现?

【问题讨论】:

  • 嗨 - 基本问题是具有更高分辨率的设备会使图像看起来更小。您需要根据设备分辨率按比例缩放“固有”大小。
  • @paulsm4,谢谢你的回答!但是你能简单地解释一下,如何根据设备分辨率按比例缩放这个尺寸吗?用最少的话说。
  • @BArtWell 你能接受答案吗?

标签: android bitmap


【解决方案1】:

我想我可以帮助你。我自己也有同样的问题。您需要做的是找到这个新屏幕比旧屏幕大多少,首先获取设备的尺寸并将它们放入 widthOfStandardDevice 和 heightOfStandardDevice。一旦您知道新屏幕比旧屏幕大多少,您将制作两个乘数来将所有内容相乘。您现在可以说将位图的大小设置为 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);

【讨论】:

    【解决方案2】:

    基本问题是分辨率更高的设备会使图像显得更小。您需要根据设备分辨率按比例缩放“固有”大小。

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

    【讨论】:

      【解决方案3】:

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

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

      如果您希望自己设置位图大小,请查看this link(如果图像质量很重要)或this link(如果速度更重要)

      【讨论】:

        猜你喜欢
        • 2017-08-19
        • 1970-01-01
        • 2017-07-09
        • 2018-01-07
        • 1970-01-01
        • 2010-11-03
        • 2015-06-09
        • 2017-01-08
        • 1970-01-01
        相关资源
        最近更新 更多