缩小android中的图像

时间:2012-11-27 08:41:12

标签: android android-imageview

我正在实现一个活动显示全屏图像视图的应用程序。现在我在应用程序的文件目录中下载了一些图像。我想在该活动中将图像设置为图像视图,我将缩小较大的图像。我在使用应用程序10到15分钟后出现OutOfMemory错误。错误在BitmapFactory的decodeFile中。这是我的代码:

public static int calculateInSampleSize(
        BitmapFactory.Options options, int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {
        if (width > height) {
            inSampleSize = Math.round((float)height / (float)reqHeight);
        } else {
            inSampleSize = Math.round((float)width / (float)reqWidth);
        }
    }
    return inSampleSize;
}

public static Bitmap decodeSampledBitmapFromFile(String imagePath,
        int reqWidth, int reqHeight) {

    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(imagePath, options);

    // Calculate inSampleSize
    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeFile(imagePath, options);

}

现在我给予reqHeight = 500和reqWidth = 500

此代码在Android指南页面中提供。有什么我想念的,如果有的话请帮助我。我尝试了很多东西,但没有得到任何解决方案。

3 个答案:

答案 0 :(得分:2)

更改int inSampleSize = 1; to int inSampleSize = 2或3并再次测试应用程序,我希望这将解决您的问题。我还建议使用这种技术,尝试延迟加载所有图像下载,这样就不会有位图和outOfMemoryError。哟可以延迟加载 - https://github.com/thest1/LazyList

答案 1 :(得分:1)

尝试使用此

Bitmap resizedbitmap2 = Bitmap.createScaledBitmap(your_bitmap, width, height,
                        true);

它会帮助你。

答案 2 :(得分:0)

如果您正在存储decodeSampledBitmapFromFile返回的位图列表,则应用程序中可能存在内存泄漏。尝试检查内存泄漏,并使用Bitmap.recycle()来回收位图并帮助安卓内存。