制作公司网站源代码怎么弄,做php网站教程视频教程,怎么做网站推广知乎,wordpress搜索主题目录
前言
1. BMP编码
2. JPEG编码 前言 我们所要实现的照相机#xff0c;支持BMP图片格式的照片和JPEG图片格式的照片。
1. BMP编码
BMP文件是由文件头、位图信息头、颜色信息和图形数据四部分构成。
1. BMP文件头#xff08;14个字节#xff09;#xff1a;BMP文件…目录
前言
1. BMP编码
2. JPEG编码 前言 我们所要实现的照相机支持BMP图片格式的照片和JPEG图片格式的照片。
1. BMP编码
BMP文件是由文件头、位图信息头、颜色信息和图形数据四部分构成。
1. BMP文件头14个字节BMP文件头数据结构含有BMP文件类型、文件大小和位图起始位置等信息。
//BMP文件头typedef__packed struct
{u16 bfType; //文件标志只对‘BM’用来识别BMP位图类型u32 bfSize; //文件大小占四个字节u16 bfReserved1; //保留u16 bfReserved2; //保留u32 bfOffBits; //从文件开始到位图数据Bitmap data开始之间的偏移量
}BITMAPFILEHEADER;
2. 位图信息头40个字节BMP位图信息头数据用于说明位图的尺寸等信息
typedef __packed struct
{ u32 biSize ; //说明 BITMAPINFOHEADER 结构所需要的字数。 long biWidth ; //说明图象的宽度以象素为单位 long biHeight ; //说明图象的高度以象素为单位 u16 biPlanes ; //为目标设备说明位面数其值将总是被设为 1 u16 biBitCount ; //说明比特数/象素其值为 1、4、8、16、24、或 32 u32 biCompression ; //说明图象数据压缩的类型。其值可以是下述值之一 //BI_RGB没有压缩 //BI_RLE8每个象素 8 比特的 RLE 压缩编码压缩格式由 2 字节组成 //BI_RLE4每个象素 4 比特的 RLE 压缩编码压缩格式由 2 字节组成 //BI_BITFIELDS每个象素的比特由指定的掩码决定。 u32 biSizeImage ; //说明图象的大小,以字节为单位。当用 BI_RGB 格式时,可设置为 0 long biXPelsPerMeter ;//说明水平分辨率用象素/米表示 long biYPelsPerMeter ;//说明垂直分辨率用象素/米表示 u32 biClrUsed ; //说明位图实际使用的彩色表中的颜色索引数 u32 biClrImportant ; //说明对图象显示有重要影响的颜色索引的数目
//如果是 0表示都重要。
}BITMAPINFOHEADER ;
3. 颜色表颜色表用于说明位图中的颜色它有若干个表项每一个表项是一个RGBQUAD类型的结构定义一种颜色。
typedef__packed struct
{u8 rgbBlue; //指定蓝色强度u8 rgbGreen; //指定绿色强度u8 rgbRed; //指定红色强度u8 rgbReserved; //保留设置为0
}RGBQUAD
4. 位图数据位图数据记录了位图的每一个像素值记录顺序是扫描行内从左到右扫描行之间从下到上。位图的一个像素值所占的字节数
当 biBitCount1 时8 个像素占 1 个字节; 当 biBitCount4 时2 个像素占 1 个字节; 当 biBitCount8 时1 个像素占 1 个字节; 当 biBitCount16 时1 个像素占 2 个字节; 当 biBitCount24 时1 个像素占 3 个字节; 当 biBitCount32 时1 个像素占 4 个字节;
biBitCount1 表示位图最多有两种颜色绝大多数情况下是黑色和白色也可以自己定义。
图像信息头装调色板中将有两个调色板项称为索引0和索引1。图像数据阵列中每一位表示一个像素。如果一个位是0显示时就使用索引0的RGB值如果位是1则使用索引1的RGB值。
保存为BMP格式的图片文件的步骤
1. 创建BMP位图信息并且初始化各个相关信息
我们要设置 BMP 图片的分辨率为 LCD 分辨率、BMP 图片的大小整个 BMP 文件 大小、BMP 的像素位数16 位和掩码等信息。
2. 创建新BMP文件写入BMP位图信息
我们要保存 BMP当然要存放在某个地方文件所以需要先创建文件同时先保存 BMP 位图信息之后才开始 BMP 数据的写入。
3. 保存位图数据
从LCD的GRAM里面读取各点的颜色值依次写入第二步创建的BMP文件即可。注意保存顺序也就是读取GRAM顺序是从左到右从下到上。
4. 关闭文件
使用FATFS在文件创建之后必须调用 f_close文件才会真正的体现在文件系统里面否则是不会写入的注意写完之后一定要调用 f_close。
2. JPEG编码 JPEGJoint Photographic Experts Group是一个由ISO和IEC两个组织机构联合组成的专家组负责制定静态的数字图像数据压缩标准这个专家组开发的算法称为JPEG算法并且成为国际上通用的标准又称为JPEG标准。 JPEG专家组开发了两种基本的压缩算法一种是采用以离散余弦变换为基础的有损压缩算法另一种是采用以预测技术为基础的无损压缩算法。 JPEG压缩是有损压缩他利用了人的视角系统的特性使用量化和无损压缩编码相结合来去掉视角的冗余信息和数据本身的冗余信息 JPEG压缩编码分为三个步骤 1. 使用正向离散余弦变换把空间域表示的图变成频率域表示的图 2. 使用加权函数对DCT系数进行量化这个加权函数对于人的视觉系统是最佳的 3. 使用霍夫曼可变字长编码器对量化系数进行编码 DMA接收来自OV2640的JPEG数据流首先使用M0AR内存1来存储当M0AR满了以后自动切换到M1AR内存2同时程序读取M0AR内存 1的数据到外部 SRAM 当 M1AR 满了以后又切回 M0AR同时程序读取 M1AR内存 2的数据到外部 SRAM依 次循环此时的数据处理是通过 DMA 传输完成中断实现的在中断里面处理直到帧中断 结束一帧数据的采集读取剩余数据到外部 SRAM完成一次 JPEG 数据的采集。 M0ARM1AR所指向的内存必须是内部内存不过由于采用了双缓冲机制我们不必定义一个很大的数组一次性接收所以的JPEG数据了而是可以分批次接收数组可以定义的比较小。