为什么我的所有位图都上采样 200%?

2024-02-15

我的应用程序 [1] 遇到严重的内存问题。为了调查这一点,我在不同状态下对我的应用程序进行了堆转储。我发现一些位图占用了大量内存。我编写了一个小工具 [2],将字节数组解码为 Windows 位图文件 (.bmp),这样我就可以see位图并将它们与我的文件中的文件进行比较res/drawable folder.

我发现我的所有文件都被上采样了两次。
我首先检查了最大的一个:堆中超过 9MB 的字节数组缓冲区,它被解码为漂亮的 1920x1280 图片,而原始图片是 960x640 png 文件。
我尝试了第二大的,超过 3MB,解码后显示出漂亮的 754x1200 图片,原始大小是......你猜怎么着?一个漂亮的 377x600 jpg 文件。

是什么赋予了?

我已经在 Android Manifest 文件中启用了硬件加速(尽管我不确定我是否真的需要它,我只是使用一些基本的视图和活动)。
我在 GSM Galaxy Nexus (yakju) 上运行 Android 4.0.2。我收到测试人员的反馈,他们的 4.0.3 Nexus S 上存在这个问题,但我还无法检查他们的堆转储。

我试图在这里节省内存,如果 Android 将所有内容加倍,难怪应用程序会很快崩溃,因为堆使用率太高(在我的情况下约为 64MB)。我希望有一个理由和解决办法。

参考:

  1. 加载活动时出现 OutOfMemoryError https://stackoverflow.com/questions/9536521/outofmemoryerror-when-loading-activities
  2. 如何实际查看从 Android 堆转储中获取的位图 https://stackoverflow.com/questions/9611592/how-to-actually-see-a-bitmap-taken-from-an-android-heap-dump

当您将图像放入res/drawable,Android 会假设它们的 dpi 为 160,即与将它们放入res/drawable-mdpi。 Galaxy Nexus 是一款 xhdpi 设备,即它的(广义)dpi 为 320。为了补偿高分辨率显示,Android 会将图像上采样 200%。

解决办法很简单,把图片放进去就可以了res/drawable-xhdpi反而。然后,声明的图像 dpi 将与您运行的显示器相匹配,并且 Android 不会对图像执行任何缩放。

请参阅http://developer.android.com/guide/practices/screens_support.html http://developer.android.com/guide/practices/screens_support.html了解更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的所有位图都上采样 200%? 的相关文章

随机推荐

  • 为什么我会收到“构造函数未定义”错误?

    为什么下面的代码会产生编译错误 构造函数AA 未定义 它不应该调用默认构造函数吗 public class A public A public class AA extends A public AA int aa public class
  • IPC::Run - 检测早产儿退出和关闭管道

    我想使用 IPC Run 通过孩子的 STDIN STDOUT 和 STDERR 开始 泵送 完成 与孩子进行通信 似乎有效 我想知道如何检测 儿童过早退出 例如由错误引起 水管被孩子关闭 The pump抛出一个die出现错误时 或将其消
  • 如何在 Python 中从 URL 读取图像数据?

    当我们处理本地文件时 我想做的事情相当简单 但当我尝试使用远程 URL 来执行此操作时 问题就出现了 基本上 我正在尝试从从 URL 提取的文件创建 PIL 图像对象 当然 我总是可以只获取 URL 并将其存储在临时文件中 然后将其打开到图
  • 如何从生产中删除 console.log?

    如何从生产中删除所有 console log 此代码无法运行laravel mix 4 x webpack mix js mix js resources js app js public js if mix inProduction mi
  • android 无法启动模拟器:无法运行程序

    我已经在Ubuntu上成功安装了android SDK和android eclipse插件 一切都工作正常 直到我删除 Ubuntu 并安装 Linux Mint 我再次安装了 SDK 并使用了我在 Ubuntu 上使用的相同 Eclips
  • “未提供任何值的属性”错误 - UrlFetchApp

    我有以下错误 未提供任何值的属性 错误来自行 var content UrlFetchApp fetch url getContentText 这是我的代码 function getArray var newData new Array v
  • 在golang中一起执行bash echo和nc [重复]

    这个问题在这里已经有答案了 这可能是一个简单的问题 在 Linux 机器上工作 我正在尝试从go程序 我有一个服务器正在监听请求 但这行代码给我带来了问题 cmd exec Command echo n hello nc localhost
  • Linux:在 docker 容器中找不到现有共享库

    我尝试在 docker 容器内设置 FastRTPS 我编写了一个 Dockerfile 它从源代码构建 FastRTPS 及其依赖项 并安装库并提供示例 但这些例子不起作用 opt usr local examples C HelloWo
  • 如何设置android wifi热点的高级设置

    我通过以下代码打开便携式 wifi 热点 private void createWifiAccessPoint WifiManager wifiManager WifiManager getBaseContext getSystemServ
  • KQL 正则表达式行提取

    我有一个名为 AdditionalExtensions 的专栏 其中包含以下内容 start Aug 13 2022 20 42 17 logver700060366 ad 我想添加正则表达式搜索以仅提取并显示日期和时间 如下所示 2022
  • Jar 文件名形成 java 代码

    我想从我的 java 代码中确定 jar 文件名 我在谷歌中找到了很多解决方案 但没有任何效果 只是为了看看我在这里尝试了什么 这是一个 stackoverflow 论坛 其中发布了一堆解决方案 堆栈溢出 https stackoverfl
  • UINavigationBar:拦截后退按钮和后退滑动手势

    我有一个 UINavigationBar 可以拦截后退按钮点击 如果有未保存的更改 则会提醒用户 这是基于中提出的解决方案UINavigationController 和 UINavigationBarDelegate ShouldPopI
  • 条目 '' 已添加错误

    我在 ASP net 中有一个 web config 给我配置错误
  • 如何使用 Promise.all 并以对象作为输入

    我一直在开发一个供自己使用的小型 2D 游戏库 但遇到了一些问题 库中有一个名为 loadGame 的特定函数 它将依赖项信息作为输入 资源文件和要执行的脚本列表 这是一个例子 loadGame root source folder for
  • 使用SyncAdapters时登录两次

    我正在使用创建一个新的 Android 应用程序SyncAdapter处理数据库同步 我已准备就绪 应用程序工作正常 但我注意到我登录了两次 首次登录发生在AuthenticatorActivity类 它扩展了AccountAuthenti
  • Android 无法在设备上安装 HelloWorld.apk (null) 错误

    我是安卓新手 当我在 Eclipse 中运行 Android 应用程序时 我在控制台中收到以下消息 2011 03 08 12 57 35 HelloWorld 2011 03 08 12 57 35 HelloWorld Android
  • WIX - 如何使用删除文件

    我们有多个配置文件 根据所选的环境 将复制正确的文件 并删除其余文件 我在用RemoveFile但这不会删除任何内容 或者可能是我没有正确使用它 有人可以举个删除的例子吗 config from INSTALLDIR 在安装过程中 复制所有
  • 避免 p:treeTable 的节点在更新后崩溃

    我有一个p treeTable以一种形式和一种p dialog以另一种形式从哪里p dialog我将数据添加到p treeTable 提交时h commandButton我添加更新的对话框p treeTable为了看到添加的节点 问题是用户
  • 从视频中获取多个缩略图

    我在用着MediaMetadataRetriever检索视频中特定时间的缩略图 这就是我实现这一目标的方法 MediaMetadataRetriever metadataRetriever new MediaMetadataRetrieve
  • 为什么我的所有位图都上采样 200%?

    我的应用程序 1 遇到严重的内存问题 为了调查这一点 我在不同状态下对我的应用程序进行了堆转储 我发现一些位图占用了大量内存 我编写了一个小工具 2 将字节数组解码为 Windows 位图文件 bmp 这样我就可以see位图并将它们与我的文