问题标签 [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.

0 投票
1 回答
2241 浏览

java - 关于Android中BitmapFactory.Options的问题

我一直在阅读有关解码位图的性能问题并收到 OutOfMemoryError “位图超出 VM 预算”问题,当我希望不会出现内存不足并在线阅读时,这是一个常见问题,被称为框架中的错误许多开发人员。

通常,我在第二次通过时收到上述错误。假设我成功加载了一个相当大的位图,然后回收它,甚至将 ref 设置为 null。当我第二次调用这个相同的方法时,它会将我的位图加载到内存中......崩溃。

我在这里和网上其他地方的以前的帖子上读过,有一些事情可以用 BitmapFactory.Options 完成(例如,显式提供输入缓冲区)。但是,在盲目地使用我发现的东西之前,我希望对这些课程有更多了解的人可以提供更多的信息。

  1. 显式地向 BitmapFactory.Options.inTempStorage 提供字节数组与在编码过程中没有它时 BitmapFactory 会做什么有什么区别?为什么/应该对 OutOfMemoryError 有所帮助?它是否提供了比默认值更小的缓冲区,因此在内存不足之前有更多的清理机会?

  2. 当我调用 Bitmap.recycle() 时具体发生了什么,为什么它与将 Bitmap 设置为 null 不同?注意:做任何一个或两个都不会影响我是否(以及何时)收到 OutOfMemory 错误。

  3. 有没有时候我应该明确邀请 GC 参与处理这类问题?我一直在假设 GC 在大多数情况下应该被信任来决定它在何时何地执行它的操作(在 Java 和 .Net 中),因为对集合有更多的后果,而不仅仅是释放内存(而且我个人对它们的了解还不足以做出这个决定)。

更新:

这个视频回答了我的大部分问题:

Google I/O 2011:Android 应用程序的内存管理

http://www.youtube.com/watch?v=_CruQY55HOk

0 投票
1 回答
8218 浏览

android - BitmapFactory.decodeStream 无异常返回 null

我尝试从服务器加载远程图像,并且由于 stackoverflow 上有很多代码示例,我有一个解决方案,它适用于 3 个图像中的 2 个。我真的不知道第三张图片有什么问题,有时当让代码在调试器中运行时,图片正在加载。此外,如果我先加载问题图片,其他两张图片有时不会加载。

这是代码:

在调试过程中,我发现 o.outWidth 是 -1 表示错误,但没有抛出异常,所以我真的无法判断出了什么问题。InputStream 总是返回一个有效值,我知道图片存在于服务器上。

最良好的祝愿,丹尼尔

0 投票
2 回答
5242 浏览

android - 在 Android 中拍照后保存缩略图

我有一个可以通过底部的完整代码拍照的应用程序。我的问题是关于如何访问存储在 jpeg 中的缩略图或生成新的缩略图。将代码放在此类或单独的类中,该类根据事件或时间表检查文件夹并生成缩略图都可以。

具体来说,我已经设置了一个缩略图,但无论如何都无法访问它。我已经尝试实现 ExifInterface 并尝试手动调整照片大小。我能够将其他参数放入 Jpeg Exif 中(在纬度和经度中放入一些随机数)。查看文件确认数字已写入。非常感谢。

这是我尝试使用 Exif 接口但失败的方法:

类的完整代码。

}

0 投票
1 回答
1177 浏览

android - BitmapFactory.decodeResource(context,int) 可以取上下文字符串吗

我有一个返回字符串的方法(假设是 var sprite),这个字符串是我的位图 img 的名称,我想将它与 BitmapFactory.decodeResource() 一起使用,但我不知道如何组合它,因为它必须是 int R.drawable.sprite

这可以做到吗?

0 投票
1 回答
1935 浏览

java - 为什么 BitmapFactory.decodeFile 返回 null?

我正在尝试使用 android FaceDetector。我需要使用位图文件(faces.bmp 来自合影),因为我还没有找到在 android 模拟器中使用 android 相机的方法。但是 BitmapFactory.decodeFile 返回 null 并且文档只说如果无法解码位图则返回 null。它只是一个 24 位的 .bmp 文件。我在 Windows 7 上使用 Eclipse。我是否错误地指定了路径名?我是否需要使用 24 位 .bmp 文件以外的其他文件?

0 投票
4 回答
23681 浏览

android - 优化使用 BitmapFactory.Options.inSampleSize 以提高速度

感谢Schermvlieger在anddev.org上提出这个问题,

我只是将他的问题复制给 SO,因为没有人在其他网站上回复,我也面临同样的问题。

我想知道就BitmapFactory.Options.inSampleSize显示图像的速度而言,最佳用途是什么。
文档提到使用 2 的幂的值,所以我正在使用 2、4、8、16 等。

我想知道的是:

  1. 我应该重新采样到仍然大于屏幕分辨率的最小尺寸,还是应该采样到刚好足以避免出现OutOfMemoryError?
  2. 如何计算在不耗尽内存的情况下仍然可以显示的图像的最大尺寸?图像的颜色深度是否也起作用,以及显示的深度?
  3. 顺便说一下,通过两种机制(BitmapFactory对于大文件,setImageURI()对于较小的文件)显示图像是否有效ImageSwitcher
  4. 是否有助于在应用程序的开头创建Bitmap,BitmapFactory.OptionsinTempStorage在需要时仅在运行中创建它们?
0 投票
1 回答
2865 浏览

android - Android:BitmapFactory.decodeStream OutOfMemoryException - SoftReference 是解决方案吗?

我收到 OutOfMemoryException:

在以下函数中:

FlushedInputStream (虽然我在添加此代码之前得到了错误):

基本上,我有一个下载图像的活动,将它们放在框架布局中并淡入淡出帧以提供幻灯片。框架布局有两个 imageview 孩子。

我见过人们谈到使用 SoftReference 来防止 OOMExceptions,但我不明白这将如何应用于我的代码以(希望)防止此错误。

谁能解释如何实现这一目标?

0 投票
6 回答
34701 浏览

android - 使用网格视图显示来自 SDCard 上特定文件夹的图像

我正在尝试创建一个gridview,该gridview 加载了来自驻留在SDCard 上的特定文件夹中的图像。文件夹的路径是已知的 ("/sdcard/pictures") ,但在我在网上看到的示例中,我不确定如何或在哪里指定要从中加载图像的图片文件夹的路径。我已经阅读了几十个教程,甚至是 developer.android.com 上的 HelloGridView 教程,但这些教程并没有教我我在寻找什么。

到目前为止,我读过的每个教程都有:

A)从 /res 文件夹中将图像称为 Drawable 并将它们放入要加载的数组中,根本不使用 SDCard。

B) 使用 MediaStore 访问了 SDCard 上的所有图片,但未指定如何设置我要显示图像的文件夹的路径形式

或者

C) 建议使用 BitmapFactory,我一点也不知道如何使用。

如果我以错误的方式解决这个问题,请让我知道并指导我采用正确的方法来做我想做的事情。

0 投票
2 回答
2765 浏览

android - Android OOM 用于带图像捕获的位图

在过去的 3 天里,我一直在与这种“内存泄漏”作斗争,虽然我已经简化了应用程序的其他部分,但这个问题仍然存在。

首先我想做的是什么。我正在使用 EXTRA_OUTPUT 触发 IMAGE_CAPTURE 的 Intent 以将图像保存到文件中。然后,我为用户显示按 2 的顺序缩小的返回图像,让他选择图像的正方形部分。一旦他选择了它,他就会被带到另一个活动,让他用一些文本等标记图像,并最终使用 HTTPPost 将所有内容上传到服务器。

现在,一切都很好!我可以通过它,一切正常,没有任何问题。但是,如果我尝试拍摄另一张照片,我总是会遇到内存不足异常。这是最近一次发生的 Logcat

它在最后一个 Activity 的 setContentView 上失败,因为它向用户显示了一次图片,但不知何故无法再次显示它。

我非常感谢您的帮助!

更新 我一直在多部手机上测试这个问题,唯一似乎这样做的是带有 Froyo 的 Nexus One。适用于 Samsung Captivate 2.1,在 Moto Milestone 2.1 上不会因这个问题而崩溃。

最后我还需要一个 500 x 500 的图像,所以我不能按比例缩小超过 2 倍。

0 投票
1 回答
1517 浏览

android - 我可以在桌面应用程序中使用 Android SDK 类吗?

我有一些android.graphics.Bitmap数据保存到我想在桌面应用程序中操作的文件中。数据是由第三方应用程序生成的,所以我无法修改应用程序以将数据保存为 png 或 jpeg。

我想知道是否可以将 android SDK jar 导入 java 桌面项目,以便可以使用 android.graphics.Bitmap 和 android.graphics.BitmapFactory 类?我尝试从 SDK 添加 android.jar,但是当我尝试调用该BitmapFactory.decodeByteArray()方法时,我得到一个运行时异常(“存根!”)。

请帮忙。

如果我无法导入 SDK jar,有人知道 android 使用的位图格式吗?