- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我的应用程序中,我遍历图像的 URL,解码并将它们放入 ArrayList<Bitmap>
中.
它们的大小可能相差很大,因此我正在使用 inJustDecodeBounds = true
进行“预解码”选项来计算必要的 inSampleSize
实际解码的值。
在下面查看我的方法,我希望它不会太难理解。基本上,我的目标是与设备的屏幕尺寸相似。
for (Element e: posts) {
if (!e.id().equals("")) {
//preparing decode
options = new BitmapFactory.Options();
input = new URL(e.url).openStream();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(input, null, options);
input.close();
//setting inSampleSize if necessary
int picPixels = options.outWidth * options.outHeight;
int picScreenRatio = picPixels / screenPixels;
if (picScreenRatio > 1) {
int sampleSize = picScreenRatio % 2 == 0 ? picScreenRatio : picScreenRatio + 1;
options.inSampleSize = sampleSize;
}
//actual decode
input = new URL(e.url).openStream();
options.inJustDecodeBounds = false;
Bitmap pic = BitmapFactory.decodeStream(input, null, options);
input.close();
picList.add(pic);
}
}
计算screenPixels
的代码:
Display display = getWindowManager().getDefaultDisplay();
Point screenSize = new Point();
display.getSize(screenSize);
int screenPixels = screenSize.x * screenSize.y;
我正在查看约 60 张图片,其中大约 40 张我的应用程序因 java.lang.OutOfMemoryError
而崩溃.
据我了解,使用 inJustDecodeBounds = true
没有分配内存,如果我的方法是正确的(我相信是的),非常大的图像会变得非常大 inSampleSize
s,所以我不知道可能是什么问题。
如有任何建议,我们将不胜感激。
最佳答案
无论您使用 inSampleSize,您都无法轻松地在内存中容纳与屏幕一样大的 60 个位图。
假设全高清屏幕你得到大约 1920*1080*60*4
字节。
这大约是 500 MB 的数据。您需要以某种方式更改您的位图加载逻辑。
在this回答你可以找出你可以计算多少内存。它因各种设备而异。
但请始终尝试让您的应用尽可能地提高内存效率。
关于java - 这个位图的inSampleSize计算方法有什么问题?内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30192265/
我在我的应用程序中使用了 Uinversal Image Loader,我需要加载 SampleSize 中的图像,该怎么做?我从作者那里读到的 Added DecodingType paramete
当我尝试压缩图片的尺寸(宽度和高度)时,我对 BitmapFactory.Options() 的 inSampleSize 属性有疑问。当inSampleSize值为1时,结果不压缩,当inSampl
因为 BitmapFactory.Options 的 inSampleSize 是一个整数,所以我的一些位图“缩小”得太多了。inSampleSize 应该在 1,6 左右,但因为它是一个整数,所以它
初始代码是官方文档:Loading Large Bitmaps Efficiently . 我开始四处寻找,发现图像不会按照 documentation 中的描述调整大小。 : If set to a
这是this link提供的方法来自谷歌。 public static int calculateInSampleSize( BitmapFactory.Options options
我们正在开发一款 Android 应用程序,可以捕获图像并将其转换为位图以发布到 Rest 服务。 在创建位图时,我们将 BitmapFactory.Options.isSample Size 配置为
我正在手机(尺寸 720x1280)上测试该应用。当我使用 2 的样本大小时,该应用程序运行良好。当我尝试使用 1 的样本大小时,该应用程序在我绘制图像的行中崩溃(下面提到的代码)。请指出我的代码需要
我有带有文本的大型可缩放位图,我想稍微调整一下。最简单的方法是使用 inSampleSize,但它工作的最小值是 2,这是 Not Acceptable (将图像大小减半基本上会使文本不可读)。 cr
感谢 Schermvlieger 询问 this anddev.org 上的问题, 我只是将他的问题复制给 SO,因为没有人在其他网站上回复,我也面临同样的问题。 我想知道在显示图像的速度方面,Bit
我想知道是否有一种方法可以在 libgdx 中加载二次采样像素图,类似于指定 inSampleSize when loading a bitmap in Android .目的显然是只分配绝对必要的堆
当我在 Google 中搜索这个主题时,1. BitmapFactory.Options options = new BitmapFactory.Options(); opti
我是一名优秀的程序员,十分优秀!