位图太大而不能上传到纹理位图、而不、太大、纹理

由网友(孤身走我路)分享简介:我在绘制目录与960x1440大小的图像文件。当应用程序启动时,图像不加载作为背景及在我的logcat见位图太大,无法上传到纹理(2880x4320,上限= 4096×4096) 为什么说2880x4320如果图像是960x1440?位图是通过XML加载:< RelativeLayout的的xmlns:机器人=...

我在绘制目录与960x1440大小的图像文件。 当应用程序启动时,图像不加载作为背景及在我的logcat见

位图太大,无法上传到纹理(2880x4320,上限= 4096×4096)

为什么说2880x4320如果图像是960x1440?

位图是通过XML加载:

 < RelativeLayout的的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s

    机器人:layout_centerHorizo​​ntal =真
    机器人:layout_centerVertical =真
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =FILL_PARENT
    机器人:背景=@可绘制/ launcher_bg
    机器人:方向=垂直
    机器人:paddingBottom会=@扪/ activity_vertical_margin
    机器人:以下属性来=@扪/ activity_horizo​​ntal_margin
    机器人:paddingRight =@扪/ activity_horizo​​ntal_margin
    机器人:paddingTop =@扪/ activity_vertical_margin>
 

解决方案

图像/绘制/ 文件夹中没有任何规范被认为是默认,这对于1DP = 1px的就是 MPDI ,然后因为你实际运行的设备是 xxhdpi 的图像得到的在运行时扩大规模。

原始图像可能是960x1440,但是从 MDPI 转化为 xxhdpi 的3倍大小,所以你的960x1440成为(3 * 960)×(3 * 1440)= 2880x4320,这是过大的纹理应用到硬件加速的观点

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

将您的图像 /绘制-nodpi / 这是简单,降低了.apk文件大小,但低端设备可能很难加载这么大的图像。 创建所有的密度缩放图像 MDPI 华电国际 xhdpi xxhdpi 来避免运行时过度缩放和在旧设备具有更小的图像。 Photoshop制作3D效果超详细教程 今日头条3D版

I've in drawable directory an image file with the 960x1440 size. When the app start, the image is not loaded as background and in the logcat I see:

Bitmap too large to be uploaded into a texture (2880x4320, max=4096x4096)

Why it says 2880x4320 if the image is 960x1440 ?

The bitmap is loaded via 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">

解决方案

an image in the /drawable/ folder without any specification is considered to be the "default", that is for 1dp = 1px that is mpdi, then because the device you're actually running is xxhdpi that image get's scaled up during runtime.

The original image might be 960x1440, but the conversion from mdpi to xxhdpi is 3 times the size, so your 960x1440 becomes (3*960)x(3*1440) = 2880x4320, which is too large of a texture to apply to the hardware accelerated views.

so to fix that is actually pretty simple, you have two choices:

move your image to /drawable-nodpi/ that's simple, reduces the .apk size, but lower end devices might struggle to load such a big image. create scaled images on all densities mdpi, hdpi, xhdpi, xxhdpi to avoid runtime over-scaling and to have smaller images on older devices.

阅读全文

相关推荐

最新文章