首页 > 试题广场 >

有一张尺寸为 72*72 像素的图片,其采用 ARGB888

[单选题]

有一张尺寸为 72*72 像素的图片,其采用 ARGB8888 格式存储,现将其置于某应用的 drawable-xxhdpi 目录中,在屏幕密度为 xhdpi 的手机上运行此应用。 问:此图片不经过采样直接加载后将占用多少 byte 内存()

  • 20736
  • 5184
  • 9216
  • 2304
选C。
  • 图像占用内存的公式是:numBytes = width * height * bitsPerPixel / 8   ,其中bitsPerPixel 是根据图片的像素格式计算出的 像素格式如 ARGB8888 
  • 对于每一个像素点使用4个byte来表示:1个byte(8位)代表red,另外3个byte分别代表green、blue和alpha透明通道。这个就简称ARGB8888
  • drawable-xxhdpi资源文件夹代表屏幕密度也决定了占用内存,xxhdpi的屏幕密度(每英寸的像素点)480
  • 图像宽度(width)×图像高度(height)×每一个像素的位数(bytes per pixel) = 内存大小
  •  72/480*320 * 72/480*320 * 4 = 9216
发表于 2019-05-02 22:24:36 回复(0)

答案是 C

每个像素占用多少 byte ?

Bitmap.Config 有四种枚举类型。
通道类型后数字表示每个通道占的大小

  • ARGB_8888:每个通道 8 bit * 4个通道 = 32 bit = 4 byte,即每个像素点占用4字节
  • ARGB_4444:同理,2 字节
  • RGB_565:RGB 3个通道分别是 5 、6 、5 ,加起来 16 bit,也就是 2 个 byte
  • ALPHA_8:只有 A 通道,占 8 bit,1 个byte

被加载的图片有多少像素点呢?

各资源文件对应屏幕密度(每英寸的像素点)

ldpi mdpi hdpi xhdpi xxhdpi
120 160 240 320 480

注意:实际加载的像素不一定等于原图像素,如资源目录屏幕密度与目标机器不匹配,将按比例缩放

总结

此类问题公式如下:
类型占用比特 x 图片原像素宽 x(目标机器屏幕密度/资源文件夹代表屏幕密度)x 图片原像素高 x(目标机器屏幕密度/资源文件夹代表屏幕密度)
4 * 72 * (320/480) * 72 * (320/480)= 9216 byte

这也是为什么在开发中往往尽可能配齐多个资源文件夹,在高分别率的机器上使用低分辨率资源文件夹的资源有可能导致占用内存翻倍,甚至翻数倍

编辑于 2021-12-23 11:36:37 回复(4)
图片本身采用ARGB8888一个像素占4字节(A:透明度8位,R:红色8位,G:绿色8位,B:蓝色8位,共32位),另一方面bitmap占用内存还和设备的显示密度,资源来源有关,(密度:drawable-160,mdpi-160,hdpi-240,xhdpi-320,xxhdpi-480,xxxhdpi-640)。最终占用内存为 72/480*320 * 72/480*320 * 4 = 9216字节
发表于 2017-02-17 11:08:39 回复(0)
注意:实际加载的像素不一定等于原图像素,如资源目录屏幕密度与目标机器不匹配,将按比例缩放。首先解释一下图片为什么会被缩放,当我们使用资源id来去引用一张图片时,Android会使用一些规则来去帮我们匹配最适合的图片。什么叫最适合的图片?比如手机屏幕密度是xhdpi,那么drawable-xhdpi文件夹下的图片就是最适合的图片。因此,当我引用android_logo这张图时,如果drawable-xhdpi文件夹下有这张图就会优先被使用,在这种情况下,图片是不会被缩放的。但是,如果drawable-xhdpi文件夹下没有这张图时, 系统就会自动去其它文件夹下找这张图了,优先会去更高密度的文件夹下找这张图片,我们当前的场景就是drawable-xxhdpi文件夹。现在在drawable-xxhdpi文件夹下面找到android_logo这张图了,但是系统会认为你这张图是专门为高密度的设备所设计的,如果直接将这张图在当前的低密度设备上使用就有可能会出现像素过低的情况,于是系统自动帮我们做了这样一个缩小的操作,缩小比例就是320/480。
发表于 2021-12-21 17:39:57 回复(0)
72*2/3 = 48
48*48*4 = 9216
发表于 2017-04-19 12:07:44 回复(0)
实际开发没有什么意义。校招都做这种题吗。。。
发表于 2023-11-21 11:21:18 回复(0)

72 * (320/480)= 48

48 * 48 * 4 = 9216

发表于 2019-11-08 16:03:14 回复(0)
3:4:6:8:12
发表于 2017-05-24 22:49:55 回复(0)
记住这个规则
发表于 2017-04-07 22:10:06 回复(0)