文章

Bitmap too large to be uploaded into a texture

Bitmap too large to be uploaded into a texture

可能导致设备点硬件加速失败,而导致程序运行异常。

drawable 资源文件与相应DPI之间的关系

drawablemdpihdpixhdpixxhdpixxxhdpi
density11.5234
densitydpi160240320480640

假设把图片直接放在drawble目录下,对应的density是1,某设备分辨率是1920 * 1080,设备的density大约是xxhdpi,也就是说,图片实际加载到内存中的时候,实际占用内存会是:图片宽度图片高度4*3 字节 。因为这台设备的dpi是3,而图片放在drawble目录下,默认是1,所以要适配到这台设备上,就要放大3倍。

默认的图片格式是ARGB_8888

一个像素用4个字节表示

其他知识点

分辨率(PX)

分辨率就是手机屏幕的像素点数。一般为屏幕的“宽×高”,例如分辨率有720×1280的手机设备,表示此屏幕在宽度方向有720个像素点,在高度方向有1280个像素点。

屏幕尺寸(英寸inch)

按屏幕对角测量的实际物理尺寸。为简便起见,Android 将所有实际屏幕尺寸分组为四种通用尺寸:小、 正常、大和超大,以英寸(inch)为单位。例如有个5寸的手机设备,是指对角线的尺寸,5寸×2.54厘米/寸=12.7厘米。

屏幕密度(DPI)

就是每英寸的像素点数,数值越高当然显示越清晰,通常 与“正常”或“高”密度屏幕相比,“低”密度屏幕在给定物理区域的像素较少。

密度无关像素 (dp)

在定义 UI 布局时应使用的虚拟像素单位,用于以密度无关方式表示布局维度 或位置。 密度无关像素等于 160 dpi 屏幕上的一个物理像素,这是 系统为“中”密度屏幕假设的基线密度。在运行时,系统 根据使用中屏幕的实际密度按需要以透明方式处理 dp 单位的任何缩放 。dp 单位转换为屏幕像素很简单: px = dp * (dpi / 160)。 例如,在 240 dpi 屏幕上,1 dp 等于 1.5 物理像素。在定义应用的 UI 时应始终使用 dp 单位 ,以确保在不同密度的屏幕上正常显示 UI。

dp、dpi与px的换算

计算相关公式:

1
2
3
px = dpValue * density + 0.5f;

dp = pxValue / density + 0.5f;
本文由作者按照 CC BY 4.0 进行授权