图片数据格式分析

图片数据格式分析

作者: yym439 时间: 2019-10-28

BMP格式

bmp格式没有压缩像素格式,存储在文件中时先有文件头、再图像头、后面就都是像素数据了,上下颠倒存储。

用windows自带的mspaint工具保存bmp格式时,可以发现有四种bmp可供选择:

  1. 单色: 一个像素只占一位,要么是0,要么是1,所以只能存储黑白信息
  2. 16色位图: 一个像素4位,有16种颜色可选
  3. 256色位图: 一个像素8位,有256种颜色可选
  4. 24位位图: 就是图(1)所示的位图,颜色可有2^24种可选,对于人眼来说完全足够了。

24位真彩色位图文件头和格式头占54字节(具体格式详见参考资料),之后才是像素数据。

JPEG格式

  1. jpeg是有损压缩格式, 将像素信息用jpeg保存成文件再读取出来,其中某些像素值会有少许变化。在保存时有个质量参数可在[0,100]之间选择,参数越大图片就越保真,但图片的体积也就越大。一般情况下选择70或80就足够了。
  2. jpeg没有透明信息。
  3. jpeg比较适合用来存储相机拍出来的照片,这类图像用jpeg压缩后的体积比较小。其使用的具体算法核心是离散余弦变换、Huffman编码、算术编码等技术,有兴趣的同学可以在网上找一大堆资料,本文就不详细介绍了。

PNG格式

  1. png是一种无损压缩格式, 压缩大概是用行程编码算法。
  2. png可以有透明效果。
  3. png比较适合适量图,几何图。 比如本文中出现的这些图都是用png保存,比用joeg保存体积要小。

应用场景

jpeg比较适合存储色彩“杂乱”的拍摄图片,png比较适合存储方几何特征比较强的矢量图。

注意: 图片像素数据加载到内存都是BMP格式加载的;JPEG、PNG要加载到内存需要先解压缩位BMP

例如:Android的Bitmap对象,存储的就是BMP位图数据(int存放一像素数据,高位到低位对应ARGB);

参考资料: https://blog.csdn.net/qingchuwudi/article/details/25785307