首页 > 试题广场 > 有一张尺寸为 72*72 像素的图片,其采用 ARGB888
[单选题]

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

  • 20736
  • 5184
  • 9216
  • 2304

72 * (320/480)= 48

48 * 48 * 4 = 9216

发表于 2019-11-08 16:03:14 回复(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

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

编辑于 2019-05-05 10:30:06 回复(1)
选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)
图片本身采用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)
3:4:6:8:12
发表于 2017-05-24 22:49:55 回复(0)
72*2/3 = 48
48*48*4 = 9216
发表于 2017-04-19 12:07:44 回复(0)
记住这个规则
发表于 2017-04-07 22:10:06 回复(0)