位图太大,无法上传到纹理中

时间:2015-02-05 14:22:37

标签: android bitmap textures

我在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">

1 个答案:

答案 0 :(得分:47)

/drawable/文件夹中没有任何规格的图像被视为&#34;默认&#34;,即1dp = 1px即mpdi,那么因为设备你&# 39;实际运行的是xxhdpi图像在运行时放大。

原始图片可能是960x1440,但从mdpixxhdpi的转换次数是此尺寸的3倍,因此您的960x1440变为(3 * 960)x(3 * 1440)= 2880x4320,纹理太大,无法应用于硬件加速视图。

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

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