【问题标题】:how to scale images appropriately to fit the screen如何适当地缩放图像以适应屏幕
【发布时间】:2014-04-03 05:04:21
【问题描述】:

在我的应用程序中,我有一个与图库类似的功能,但遇到了需要缩放图像的问题。我在 Nexus 5 中的测试设备,屏幕宽度为 1080p (360dp)。下面是使用我的应用和系统默认图库打开的宽度为 604 像素的图像的屏幕截图:

我的应用:

==============================

画廊:

我用来显示图像的代码非常简单:

    pathToImage = getIntent().getStringExtra("path");
    img = (ImageView) findViewById(R.id.imgPictureView);
    try {
        bmpImage = BitmapFactory.decodeFile(pathToImage);
        img.setImageBitmap(bmpImage);

    } catch (Exception e) {
        e.printStackTrace();
    }

打开高分辨率相机照片会导致我的 ImageView 调整其宽度以填充屏幕,但是我得到的堆大小约为 80 (!!) MB。

很明显,系统库决定是否向上/向下缩放Bitmap 以使其适合屏幕。例如,它将 60 像素的图像放大,但只是放大了一个很小的比例,因此它不会变得非常模糊。我想它还会缩小大型相机图片以防止OutOfMemoryError's。所以在我上面的例子中,画廊假设 604px 的宽度足以将其放大到 1080 像素而没有明显的质量损失,我的应用程序当然不是因为缺少任何额外的代码。

所以问题是:我怎样才能达到相同的结果,并根据当前屏幕确定放大/缩小图像而不损失质量的因素?

注意:对于那些现在将发布大量(超出争议的惊人)代码示例来展示如何实际缩放 Bitmap 或确定屏幕宽度的人 - 这不是我的问题。 p>

【问题讨论】:

    标签: android image-scaling android-bitmap


    【解决方案1】:

    位图会占用大量内存,您必须缩小它们的大小。这里没有给你一个复制的解决方案,而是一个详细的文档:

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

    您真的应该阅读整个指南。有很多东西要学。

    其次,将 ImageView 的宽度设置为 MATCH_PARENT 并尝试将其 scaleType 属性更改为 centerCrop。使用 scaleType 的其他可用值来获得您想要的结果。

    【讨论】:

    • 你也可以查看这个:stackoverflow.com/questions/4837715/…
    • 哦.. 感谢您指出这一点,我忘了检查我的ImageView 的尺寸是否设置为wrap_content。这就是问题所在。
    猜你喜欢
    • 2012-05-10
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 2014-03-15
    • 2011-05-12
    • 2014-05-09
    • 2014-01-18
    • 2021-06-22
    相关资源
    最近更新 更多