曾今面对过这样一道面试题,一脸懵逼,随便答了一个10KB,当即面试官问我怎么算出来的,答不出来,尴尬收场。


以下为查阅后的正确答案及分析:

B是Byte的缩写,B就是Byte,也就是字节(Byte);b是bit的缩写,b就是bit,也就是比特位(bit)

而比特是英文 binary digit的缩写。比特是表示信息的最小单位,即计算机科学中的基础数据单位,0或1。

一个int数为32位,即4字节。 一个char为8位,即1字节。

那么一个像素呢?

我们来做最基本的推理。

每个像素保存的为当前像素点的颜色值,假定有四种颜色值(r,g,b,a)且每种都为256色。

那么每个颜色值需要一个字节8bit来存储,即2的8次方256来存储,那么每个像素点占四个字节即4B。


那么整张图占的字节数为:

1024*1024*4=4194304B=4096KB=4MB


但是:

以上计算都是基于(r,g,b,a)四种256色(真彩色)的计算,

这里引入位深度的概念:“位”( bit )是计算机存储器里的最小单元,它用来记录每一个像素颜色的值。图像的色彩越丰富,“位”就越多。每一个像素在计算机中所使用的这种位数就是“位深度”。

继而,(r,g,b,a)四种256色需要8*4位,即32位。那么真彩色图片即为32位深度图片。至于8位、16位(通常分为5位红色和5位蓝色,6位绿色(眼睛对于绿色更为敏感))24位深度图像大小,请自行计算。


再次但是:

图片也分很多种啊,jpg、png、git等等,那计算大小结果能一样吗?

这里引入BMP的概念:(全称Bitmap)是Windows操作系统中的标准图像文件格式。

对于bmp位图,由于存储时无压缩,我们可以从像素总量(比如上面的255*255)以及位图存储格式中,算出一幅位图占用的字节数;

可是jpg、png等多种格式,我们光知道他们像素总数是无法计算出图片大小的~~因为压缩方式、编码等都不一样~~~~