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

Bitmap too large to be uploaded into a texture

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

/drawable/ 文件夹中没有任何说明的图像被认为是 "default",即 1dp = 1px 即 mpdi,然后因为您使用的设备实际上 运行 是 xxhdpi 图像在运行时按比例放大。

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

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

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