BMP格式
bmp格式没有压缩像素格式,存储在文件中时先有文件头、再图像头、后面就都是像素数据了,上下颠倒存储。
用windows自带的mspaint工具保存bmp格式时,可以发现有四种bmp可供选择:
- 单色: 一个像素只占一位,要么是0,要么是1,所以只能存储黑白信息
- 16色位图: 一个像素4位,有16种颜色可选
- 256色位图: 一个像素8位,有256种颜色可选
- 24位位图: 就是图(1)所示的位图,颜色可有2^24种可选,对于人眼来说完全足够了。
24位真彩色位图文件头和格式头占54字节(具体格式详见参考资料),之后才是像素数据。
JPEG格式
- jpeg是有损压缩格式, 将像素信息用jpeg保存成文件再读取出来,其中某些像素值会有少许变化。在保存时有个质量参数可在[0,100]之间选择,参数越大图片就越保真,但图片的体积也就越大。一般情况下选择70或80就足够了。
- jpeg没有透明信息。
- jpeg比较适合用来存储相机拍出来的照片,这类图像用jpeg压缩后的体积比较小。其使用的具体算法核心是离散余弦变换、Huffman编码、算术编码等技术,有兴趣的同学可以在网上找一大堆资料,本文就不详细介绍了。
PNG格式
- png是一种无损压缩格式, 压缩大概是用行程编码算法。
- png可以有透明效果。
- png比较适合适量图,几何图。 比如本文中出现的这些图都是用png保存,比用joeg保存体积要小。
应用场景
jpeg比较适合存储色彩“杂乱”的拍摄图片,png比较适合存储方几何特征比较强的矢量图。
注意: 图片像素数据加载到内存都是BMP格式加载的;JPEG、PNG要加载到内存需要先解压缩位BMP
例如:Android的Bitmap对象,存储的就是BMP位图数据(int存放一像素数据,高位到低位对应ARGB);
参考资料: https://blog.csdn.net/qingchuwudi/article/details/25785307