JPG(JPEG)是最常见的图片格式,其具有出色的压缩能力和很小的图象失真。因性能优异,JPG现已成为计算机的标准图象格式,且随着枝术的进步,JPG的算法也有了进一步的发展。所以加入到汇编中已经不可避免的需要图像解码库!
Jpeg解码时利用到libjpeg解码库;解码大概可以分为九个步骤:
1.设置出错处理函数。
2.初始化解码对象图片。
3.初始化源数据。
4.读取jpeg文件的头信息。
设置解码参数。6.开始解码。
7.读取解码数据。
8.结束解码。
9.释放解码对象。
example.c他给出了解码代码和压缩代码,函数put_scanline_someplace(buffer[0],row_stride)需要自己编写。功能是存取解码一行得到的bmp数据。对于24位真彩图像使用char aa[960][1600][4];inti=0;
While(cinfo.output_scanline<cinfo.output_height){
(void)jpegg_read_scanline(&cinfo,buffer,1);
Put_scanline_someplace(buffer[0],row_stride);
For(j=0;j<cinfo;output_width/3;j++)
{
Memcpy(aa[i][j],*buffer+j*3,3);
}
i++;
}
这里要注意rgb三色早字符数组中的存放顺序,独处颜色会不对,只需改变a[i][j][0]和a[i][j][2]的内容就行。
这个JPG解码库是针对MCU写的,为了节约资源,它实际是标准JPG解码的一个子集。只实现了部分JPG解码的功能。本库并不能支持所有格式的JPG图片,但绝大部分图片是支持的(经Windows的绘图存贮的JPG图片都支持)。同时由于MCU资源有限,实际解码的JPG文件需要用专用JPG垃圾信息清理软件清理一下(这种软件并不破坏原文件的文件结构),可以放心使用。使用它主要是因为象Photoshop等软件处理后的JPG图片里会包含与原图片不相关的各种垃圾信息,当原图片不是太大时,这些信息可能比图象本身还要大得多。
此外,铭正同创拥有自主的JPG解码源代码,可快速针对不同的MCU/CPU平台制作出专有的应用库,这些技术将会随着产品提供给特定的用户;而为了方便用户作技术评估,我们提供了基于凌阳unSP系列单片机(SPCE061A)的JPG解码应用库,以及Demo程序。