如何适当缩放图像以适应屏幕

时间:2014-04-02 20:30:56

标签: android image-scaling android-bitmap

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

我的应用:

enter image description here

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

画廊:

enter image description here

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

    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。所以在我上面的例子中,画廊假设604px的宽度足以将其扩展到1080而没有明显的质量损失,我的应用程序当然不是由于缺少任何额外的代码。

所以问题是:如何根据当前屏幕获得相同的结果并确定向上/向下缩放图像而没有质量损失的因素?

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

1 个答案:

答案 0 :(得分:1)

Bitmap可以使用大量内存,你必须缩小它们。这里有一份详细的文档,而不是给你一个复制的解决方案:

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

你真的应该通过整个指南。还有很多东西需要学习。

其次,将ImageView的宽度设置为MATCH_PARENT,然后尝试将其scaleType属性更改为centerCrop。使用scaleType的其他可用值来获得所需的结果。