问题标签 [bitmapfactory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Android - BitmapFactory.decodeByteArray - OutOfMemoryError (OOM)
我已经阅读了 100 篇关于 OOM 问题的文章。大多数是关于大位图的。我正在做一个地图应用程序,我们在其中下载256x256
天气叠加图块。大多数都是完全透明的并且非常小。我刚刚在调用时遇到了 442 字节长的位图流崩溃BitmapFactory.decodeByteArray(....).
例外规定:
代码是:
这是我在调试器中看到的:
所以位图数据是 442 字节。为什么它会尝试创建 23671KB 位图并耗尽内存?
android - BitmapFactory 返回比源更大的图像
嗨,我正在从名为 .png 的 png 图像创建位图image.png
。图像的尺寸为 75(宽)x 92(高)。当我运行此代码时:
记录器日志:
并且屏幕上的图像比其他尺寸为 75 x 92 的图像大。我该怎么做才能让 android 加载具有正确尺寸的图像?
android - 在 Android 中如何解码 cmyk 颜色格式的 jpeg?
我正在尝试解码 CMYK 颜色格式的 jpeg。BitmapFactory 返回空值。我用谷歌搜索,但没有运气。是否有可能 Android 团队没有正确的工作来支持各种颜色格式?
我使用的是安卓 2.2。
太感谢了。
android - 使用 BitmapFactory.decodeFile() 但图像未解码
我的问题是我从图库中获取图像并使用 BitmapFactory.decodeResource() 将图像转换为位图,但问题是图像是在模拟器中获取的,但不是在真实设备中,在真实设备中,位图值变为空。以下是我解码图库图像的代码。
任何帮助,将不胜感激。
android - 在不同的 Android 设备上看似不一致的 OutOfMemory 崩溃
我正在制作一个必须在开始时加载所有位图的游戏,因为在内置游戏编辑器中,用户可以将任何精灵放入关卡中。关卡也使用各种精灵,没有任何系统允许为每个关卡动态加载精灵组。
一段时间后,游戏中现在已经有 250 多个 png 图像,总大小为 3.5MB。
游戏使用 BitmapFactory.decodeStream 加载大多数精灵(大约 200 个),没有设置任何选项,并且还有大约 50 个在活动的 xml 布局中引用。
当我在各种设备上测试时,游戏有时会耗尽内存,但我找不到模式,甚至决定我必须做多少,例如减少图像的大小或数量。
我开发的手机,HTC希望与Android 2.2 24MB VM堆大小永远不会运行OOM。
具有 Android 2.2 和 40MB 虚拟机堆大小的 Dell Streak 也从不运行 OOM。
具有 Android 2.1 和 24MB 虚拟机堆大小的 Motorola Milestone 成功加载了所有精灵,但在启动其中一项活动(开始菜单)时,在 ImageView 中使用的最后几张图像阻塞。如果我将其中一些这样的 ImageView 注释掉,它会加载正常,但稍后可能会因其他活动之一而窒息。它也不稳定,可能是因为碎片在不同的发布中发生的方式不同。
HTC hero 和我的好友 2.2(不知道堆大小,是 16MB 吗?)也崩溃了。
最让人迷惑的是,摩托罗拉有24MB,和HTC的愿望一样。2.1 实现内存管理的效率会降低吗?(例如导致更多碎片?)或者所有摩托罗拉手机的内存管理都更差?那么为什么HTC hero with 2.2会崩溃呢?HTC 的欲望有什么比 HTC hero 更大的呢?
看起来 OOM 发生在旧手机上,但这是我迄今为止唯一想到的。
如果 OOM 只发生在占市场 5% 的旧手机上,我可以通过收集崩溃报告并从支持列表中排除所有崩溃的设备来从支持的设备中排除 2.1 或更具体的列表。否则我现在需要将我的所有图像缩小某个常数因子(例如 1.6),这意味着调整所有 45 个级别的大小,这需要数天的设计和测试、重新定位 GUI 元素等。即使在那之后,我d 仍然不确定,在哪些设备上将位图的总大小减少 2 倍就足以避免 OOM。
对此有何建议?我应该为 BitmapFactory 设置任何特定选项吗?顺便说一句,大多数图像都有透明的 bg 像素,据我所知,这些像素不允许以 565 格式获取它们。
我花了 2 天时间在这里和其他地方浏览,但仍然不知所措。
谢谢你。
android - Android:替代 GIF 加载器?
我想在 Android 中加载图像,但如果图像太大,我想在加载之前调整它的大小。我了解到可以使用 BitmapFactory 来获取图像的大小,然后可以找出适当的缩放因子并使用 BitmapFactory 加载具有所需尺寸的图像(根据我在这个相关线程中找到的非常有能力的建议) .
所以我尝试了它,但它拒绝工作。我花了最后一个小时挑选代码,试图弄清楚为什么这样一个简单的操作没有任何效果(缩放因子被完全忽略了!)
然后我偶然发现了Android 问题 3072 ...事实证明,这已被确定为 GIF 文件损坏了两年多。我意识到 GIF 并不完全是现代的,但它仍然存在并且被广泛使用(我的测试集有很多,这就是为什么在我发现错误报告之前它似乎一直被破坏)。
我的问题是,我可以使用什么来替代 BitmapFactory 来在使用缩放因子时正确读取和调整 GIF 文件而不默默地忽略它?内存限制阻止直接加载大图像以进行进一步处理,因此这需要一个流式解决方案。
我的另一个问题是,有多少其他人遇到了像这样的旧的、未修复的错误,或者没有意识到,或者更糟的是,依靠 API 来准确执行请求的功能并最终导致内存泄漏和其他奇怪的意外?
android - Android ImageView setImageBitmap
我试图更好地了解 Android 如何处理图像以便更有效地使用内存。我有一个图像存储在其中Bitmap
,我正在使用ImageView.setImageBitmap()
它来显示它。现在的问题是 - 它会使用Bitmap
Ive 将来传递它,还是复制它并且Bitmap
在调用 to 之后不再使用我创建的setImageBitmap
?
假设它会继续引用Bitmap
我通过的,当Bitmap
通过BitmapFactory
usinginPurgeable
选项创建时它会如何表现?会ImageView
阻止Bitmap
暂时从内存中清除吗?它只会在ImageView
有View.VISIBLE
状态时发生,还是在View.GONE
和时发生View.INVISIBLE
?或者也许只有在ImageView
屏幕上可见?
还有一件事 - 查看 Android 源代码会发现编码的字节数据总是被复制到内存中(inInputShareable
目前被忽略)。它是否计入 android Java 应用程序的 16/24MB 内存限制?
谢谢
android - 互联网上的 Android BitmapFactory
我正在从互联网上下载图像,然后将它们按比例显示在屏幕上。这个想法是使用 inSampleSize,这样我就可以在解压缩时缩放大图像并防止 OutOfMemory 异常。但是为了找到 inSampleSize 我需要知道图像分辨率。它可以使用 inJustDecodeBounds 选项获得。
问题是我无法将流传递给它并直接从互联网下载图像,因为它将被下载两次(首先获取大小,然后获取缩放的位图)。我无法下载图像并将其存储在 RAM 中,因为图像大小可能很大。剩下的唯一解决方案是将图像下载到 SD 卡/内部存储器并从那里读取,但是当用户没有空间时,就会发生坏事。
问题是 - 有什么方法可以做到这一点而不依赖于不需要下载两次图像的存储和 RAM 内存?或者,BitmapFactory 在使用 inJustDecodeBounds 时可能不会下载整个图像,而只是标题?
谢谢
android - 如何调查在 Android 中使用 BitmapFactory 加载位图的问题?“getEntry 失败,因为 entryIndex...”
我正在尝试加载位图并将其显示在画布上。我以前用这种方法做过,效果很好。不幸的是,这次出了点问题,我不知道如何才能找到问题所在。
我的代码到这里:
但随后我在 logcatLoading bitmaps
和Bitmap Loaded
. 之后,应用程序强制关闭,我再也看不到stageLHeight.
这是日志猫:
如果它有用,R.java:
android - Android:我应该使用哪种图像格式,为什么?
我是一名初学者程序员,我的问题是:我的 android 应用程序应该使用哪种图像格式?
描述:我只使用插图,所以图像大多是背景图像,还有一些按钮,我想知道哪种方法最好。
我目前在图像方面的进展如下:我使用 .png 文件格式。我不知道我应该使用什么分辨率,现在我使用 300x400 像素的图像 aproximetly。
这是我使用图像的代码:
Bitmap bMap = BitmapFactory.decodeResource(getResources(), MyArray[index].getArtiD());
MyImageView.setImageBitmap(bMap);
所以这就是我在 Android 中使用图像的方式,如果有人知道问题、提示或“必须知道的信息”,请告诉我这样做。我真的不明白为什么要使用这个位图工厂或为什么要使用 png 格式。我想以最好的方式做到这一点,而且我在 android 文档中看不到很多东西。
谢谢,亚当