一、图像处理
多数图像的存储格式一般都为字节型(char), 每种图像格式包括很多信息,其中主要还是颜色的存储RGB和RGBA。其中图像存储安照矩阵的方式,如下图:
![3e85ec2507bc2715c5fc0b4b76c2cddd.png](https://i-blog.csdnimg.cn/blog_migrate/7bf65e2816de76fdc5478f93e9872b94.jpeg)
![e5d3fe88e48f982cbe98a21ba5afd818.png](https://i-blog.csdnimg.cn/blog_migrate/1636e509c1b311cec95dd71eccae9bc6.jpeg)
如果有A通道说明这个图片有透明效果, R、G、B,每个数据使用一字节来表示,所以图(1) 中每个像素大小为 3×8=24位,而图(2)中每个像素大小是 4×8=32位。
图像是二维数据,而在内存中只能一维存储。
二维转一维有2种常用的方式: 按像素 "行排列" 从上往下或从下往上。
不通的图形库中每个像素点中RGBA的排序顺序可能不一样, 上面说过一般有RGB或RGBA 四个分量,
那么在内存中RGB就有多种情况,跟排列组合类似, 不过一般只会有 RGB、BGR、RGBA、BGRA这几种排列,
绝大数图形库或缓解是 BGRBGRA排列。
二、图像压缩
如果图像原始格式直接存储到文件中会很大, 比如一个 8000×8000 24位图,所占文件大小为 8000×8000×3字节=183.1MB,占用空间非常高。
如果使用zip或rar之类的通用算法压缩图像数据, 得到的压缩比不会太高,因为压缩算法没有针对图像数据结构进行特殊处理。
于是就有了jpeg、png等格式,同样是图像压缩算法 jpeg和png也有不同的使用场景。
以下图是图像在内存中的存储方式:
![ee9bb3a4ba8a5092e372a3d8db53d623.png](https://i-blog.csdnimg.cn/blog_migrate/56c99b0e57f831425be4f6324d32763a.jpeg)
jpeg、png文件相对于图像,就相当于 zip、rar 格式相对于普通文件(用zip、rar 格式对普通文件进行压缩)。
另外bmp是无压缩的图像格式,在这里以Bmp为例,介绍一下Bmp格式的图片存储格式。
三、bmp格式
bmp格式没有压缩像素格式,存储在文件中时先有文件头、再图像头、后面就都是像素数据了,上下颠倒存储。用windows自带的mspaint工具保存bmp格式时,可以发现有四种bmp可供选择:
单色: 一个像素只占一位,要么是0,要么是1,所以只能存储黑白信息
16色位图: 一个像素4位,有16种颜色可选
256色位图: 一个像素8位,有256种颜色可选
24位位图: 就是图(1)所示的位图,颜色可有2^24种可选,对于人眼来说完全足够了。
以下bmp 文件头和图片格式头的结构:
![17ffbaf99c1a517c1285700ae3bd3ebe.png](https://i-blog.csdnimg.cn/blog_migrate/9332d200062365efb3f00628f5403791.jpeg)
![6a4923d0efe67b02031bf6169d3e507c.png](https://i-blog.csdnimg.cn/blog_migrate/99a3de1b0960c1bfc8c140014877366b.jpeg)