一、BMP位图
1.
一个实际例子,选择一个24位深度的225×225位图,
由于24位位图是真彩色,没有颜色表这一样,所以
其文件大小为152.154字节,则
152.154=14+40+(225×3+1)×225
注:因为1个像素用三个字节来表示,所以乘以3;因为位图存储时,Windows规定一个扫描行所占的字节数必须是
4的倍数(即以long为单位),不足的以0填充,225×3+1刚好是4的倍数;14和40是位图文件头和位图信息头的字节大小;
当利用绘图程序将文件保存为256色,即8位深度的位图后,文件大小变为52.378字节,即
52.378 = 14 + 50 + 256 × 4 + (225 + 3)× 225
注:256色位图有颜色表,每个颜色表结构体是4字节,所以颜色表这一项占256*4 个字节;
225+3 刚好凑成4的倍数
3.
从上面的两个例子可知,对于bmp位图,由于存储时无压缩,我们可以从像素总量(比如上面的255*255)以及位图存储格式中,算出一幅位图占用的字节数;
也即是说,如果几幅位图都是 1280*960,并且都是8位深度,那么它们占用的存储大小都是一样的~
(葫芦岛相机拍摄的图片,大小为:14+40+256*4+1280*960字节,约为1.17MB~)
对于从网上随便下载的一幅图片,可能是jpg、png、bmp等多种格式,我们光知道他们像素总数是1280*860,是无法计算出图片大小的~~因为压缩方式、编码等都不一样
4.
我们通常说,一幅图片的分辨率是1280*960,这个其实并不准确~
5.1920*1200是像素总量,不是密度,密度要除以英寸才是,存储在图像头部信息中,用于打印设置。
当我们用不同的格式进行保存(比如8位位图、24位位图、jpg、png等不同格式),最后在电脑上显示的图片尺寸都为:1280*960,而图片的存储大小都不一样~~我们用不同方式存储时,图片的像素总数是不变的,都为1280*960,只不过每个像素需要的字节数不一样,所以文件大小也不一样~即便是jpg等压缩格式,像素的个数并没有被压缩,只是针对不同的像素点,可能需要的字节数不一样
6.
两个相同尺寸1920*1200的图像,在相同色彩度(如24位真彩)情况下,无压缩的BMP位图的大小是相同的。 而你看到文件大小的不同,是因为图像压缩算法造成的(无压缩文件会非常大,一般为BMP格式),图像压缩是个比较大的课题,分为无损压缩(PNG等)和有损压缩(JPG等),具体压缩算法非常多,各有优劣。 以最常见的JPG为例,其压缩算法是有损的,压缩后的文件大小有几个重要的决定因素:原图尺寸、有损程度、图像中相邻点色差,图像中存在色彩数量等等。