- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经阅读了 100 多篇关于 OOM 问题的文章。大多数是关于大位图的。我正在做一个 map 应用程序,我们在其中下载 256x256
天气叠加图 block 。大多数是完全透明的并且非常小。我刚刚在调用 BitmapFactory.decodeByteArray(....) 时在 442 字节长的位图流上发生崩溃。
异常状态:
java.lang.OutOfMemoryError: bitmap size exceeds VM budget(Heap Size=9415KB, Allocated=5192KB, Bitmap Size=23671KB)
代码是:
protected Bitmap retrieveImageData() throws IOException {
URL url = new URL(imageUrl);
InputStream in = null;
OutputStream out = null;
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// determine the image size and allocate a buffer
int fileSize = connection.getContentLength();
if (fileSize < 0) {
return null;
}
byte[] imageData = new byte[fileSize];
// download the file
//Log.d(LOG_TAG, "fetching image " + imageUrl + " (" + fileSize + ")");
BufferedInputStream istream = new BufferedInputStream(connection.getInputStream());
int bytesRead = 0;
int offset = 0;
while (bytesRead != -1 && offset < fileSize) {
bytesRead = istream.read(imageData, offset, fileSize - offset);
offset += bytesRead;
}
// clean up
istream.close();
connection.disconnect();
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeByteArray(imageData, 0, bytesRead);
} catch (OutOfMemoryError e) {
Log.e("Map", "Tile Loader (241) Out Of Memory Error " + e.getLocalizedMessage());
System.gc();
}
return bitmap;
}
这是我在调试器中看到的:
bytesRead = 442
所以Bitmap数据是442 Bytes。为什么它会尝试创建一个 23671KB 的位图并耗尽内存?
最佳答案
我以前遇到过这样的问题。 Android 使用 Bitmap VM,它非常小。确保通过 bmp.recycle 处理位图。更高版本的 Android 有更多的位图虚拟机,但我一直在处理的版本有 20MB 的限制。
关于Android - BitmapFactory.decodeByteArray - OutOfMemoryError (OOM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7291029/
我正在尝试从Camera.PictureCallback onPictureTaken获取Jpeg,但是当我这样做时 bitmapImage = BitmapFactory.decodeByteArr
这段代码给出了运行时异常,我无法捕获它。 BitmapFactory.decodeByteArray 不会返回 null 或类似的内容。 Bitmap bitmap = BitmapFactory.d
是否记录(或合理假设)BitmapFactory.decodeByteArray(...)可以预期识别列出的任何图像格式 here ? 最佳答案 是的,假设是合理的(如果你看一下 AOSP 的源代码,
我正在开发一个 Android 应用程序,它可以显示从 Flickr 下载的照片。我从一个字节数组中获取一个位图对象,该数组又从相关的 Flickr URL 中读取,如下所示: BitmapFacto
这是我的用例: ByteArray ba; // Some value is assigned here Bitmap bitmap = BitmapFactory.decodeByteArray(b
我有一个包含 0 和 -1 (255) 系列的 byte 数组。这是使用 Otsu 算法进行二值化的结果。我用过: BitmapFactory.Options opt = new BitmapFact
我想播放逐帧动画。我有一个 ArrayList byeArr,其中包含 jpeg 图片并将它们一一解码以显示在表面 View 上。 tim = new CountDownTimer(1,1) { in
我正在尝试使用套接字连接将图像从 pc 传输到 android。我能够从电脑接收数据到手机,但是当我将 byte[] 传递给 BitmapFactory 时,它返回 null。有时它会返回图像,但并非
我已经搜索了一段时间,但找不到 android 的 BitmapFactory.decodeByteArray() 的示例实现 我希望了解函数的工作原理,因为我计划将它用于我正在从事的项目,但我无法获
这是 mp3 文件标签中的图像 http://i.stack.imgur.com/HtXqA.jpg 我使用 Android 的 MediaMetaDataRetreiver 从 mp3 文件中获取此
我已经阅读了 100 多篇关于 OOM 问题的文章。大多数是关于大位图的。我正在做一个 map 应用程序,我们在其中下载 256x256 天气叠加图 block 。大多数是完全透明的并且非常小。我刚刚
我正在创建音频播放器,我想向播放器显示歌曲封面,它使用小图像工作,但如果 mp3 文件有大图像,则它会退出布局 View 。我正在使用以下代码将图像大小调整为 300x300: BitmapFacto
编辑:当我将这些字节保存在 txt 文件中以及将其另存为 png 文件时,它会显示图像,但它在这里不起作用,为什么...? 我正在使用这段代码从字节数组创建图像在 doInBackground() 上
我使用 BitmapFactory.decodeByteArray 从 PNG 图像生成位图。然后我使用 Bitmap.getPixels 来检索所有像素数据。问题是当一个像素被设置为完全透明时,所有
我正在使用相机的 previewCallback 来尝试抓取图像。这是我正在使用的代码 private Camera.PreviewCallback mPrevCallback = new Camer
我现在正在开发一个小型服务器-客户端应用程序,服务器位于计算机上,客户端位于 Android 设备上。在某些时候,我希望设备检查它所拥有的图像是否是最新的,并使用尽可能少的数据,因此我编写了一些代码来
我正在尝试将以 Base64 格式存储在数据库中的图像转换为要在 Imageview 中使用的位图。 因此,我以这种方式将其存储在 SQLite 中: Bitmap imageBitmap = (Bi
我正在尝试下载图像并将其保存到数据库我下载它并将我保存到 BLOB 字段当我想检索它时它得到空值。我搜索了很多并检查了很多东西但我不知道在哪里问题:(。 保存图片部分: MyDataBase = ne
所以我正在尝试从一位通过蓝牙串行端口获取图像数据的同事那里移植一些 C++ 代码(我使用的是 Android 手机)。我需要根据数据生成位图。 在测试移植的代码之前,我编写了这个快速函数以假设生成一个
我有一个图像以这种形式存储在数据库中 "/9j/4AAQSkZJRgABAQAAAQABAAD/2w igD//2Q==" 所以绝对是base64编码的。 我通过 php 函数获取它: ... $q
我是一名优秀的程序员,十分优秀!