【问题标题】:Bitmap too large to be uploaded into a texture位图太大,无法上传到纹理中
【发布时间】:2015-04-05 10:51:24
【问题描述】:

我在 drawable 目录中有一个 960x1440 大小的图像文件。 当应用程序启动时,图像没有作为背景加载,并且在我看到的 logcat 中:

位图太大,无法上传到纹理中(2880x4320,最大值=4096x4096)

如果图像是 960x1440,为什么会显示 2880x4320?

位图通过xml加载:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"

    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/launcher_bg"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

【问题讨论】:

  • 请提供一些示例代码,用于加载纹理。
  • 如果其中没有大文件,您是否检查了所有可绘制文件夹?您的应用程序在没有背景图像的情况下工作?那是什么图片文件,png,jpg?
  • 我只有 1 个文件用于 1.02 mb 的所有分辨率(可绘制)和 960x1440 大小...是的,应用程序在没有 bg 图像的情况下运行...但不是在所有设备上,仅目前在 Nexus 5 上
  • 我不相信这一点,抱歉 ;) 你说它只能在 nexus 5 上运行,我认为你的其他测试设备比较旧,对吧?该消息说明了一些关于纹理的内容,表明soc的opengl引擎,它对不同的设备和soc有不同的限制。
  • 仅在 Nexus 5 上不会加载图像...

标签: android bitmap textures


【解决方案1】:

/drawable/ 文件夹中没有任何规范的图像被认为是“默认”,即 1dp = 1px 即 mpdi,然后因为您实际运行的设备是 xxhdpi 该图像get 在运行时按比例放大。

原图可能是960x1440,但是mdpixxhdpi的转换是3倍大小,所以你的960x1440变成(3*960)x(3*1440) = 2880x4320,太大了应用于硬件加速视图的纹理。

所以要解决这个问题其实很简单,你有两个选择:

  1. 将您的图像移至/drawable-nodpi/,这很简单,可以减小 .apk 大小,但低端设备可能难以加载如此大的图像。
  2. 在所有密度 mdpihdpixhdpixxhdpi 上创建缩放图像,以避免运行时过度缩放并在旧设备上使用更小的图像。

【讨论】:

  • 其实没有 2. 现在非常简单,感谢 Android Drawable Importer 插件
猜你喜欢
  • 2012-05-03
  • 2016-11-20
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多