在我的应用程序中,我有类似于Gallery的功能,并面临我需要缩放图像的问题。我在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
。所以在我上面的例子中,画廊假设604px的宽度足以将其扩展到1080而没有明显的质量损失,我的应用程序当然不是由于缺少任何额外的代码。
所以问题是:如何根据当前屏幕获得相同的结果并确定向上/向下缩放图像而没有质量损失的因素?
注意:对于那些现在发布大量(超出争议的惊人)代码示例的人来说明如何实际缩放Bitmap
或确定屏幕宽度 - 这不是我的问题。
答案 0 :(得分:1)
Bitmap可以使用大量内存,你必须缩小它们。这里有一份详细的文档,而不是给你一个复制的解决方案:
http://developer.android.com/training/displaying-bitmaps/index.html
你真的应该通过整个指南。还有很多东西需要学习。
其次,将ImageView的宽度设置为MATCH_PARENT
,然后尝试将其scaleType
属性更改为centerCrop
。使用scaleType的其他可用值来获得所需的结果。