嵌入式系统上数字图像显示,处理过程内存使用的思考
很多的情况下PC系统上不需要考率的问题在嵌入式开发过程中却显得极为重要。这里我就介绍一下,自己在编写嵌入式系统上数据图像处理内存使用方面的结论。
我们知道,嵌入式系统是一个资源有限的系统。通常小型系统的内存总量不会超过1M左右,即便大一些的运行QT程序的系统内存也不过几M大小。对于这样的系统,run在这样环境下的application,就应该考虑到这些特点,根据实际的特点来开发application。下面我介绍一个自己遇到的问题,来简单阐述一下自己的体会。
我一直在学习嵌入式系统上图像处理软件的开发。最基础的问题是解析BMP,GIF,JFIF等文件的信息,将压缩/或没有压缩的数据转换成为可以直接显示,处理的RGB数据。问题在于,即便是300X200这种“小”图片占用的存储空间就已经很庞大了(大约100~200K,要知道一般的嵌入式UI系统也只不过占用100~300K的样子)。这就要求,在编写application的时候,花一些心思在如何使用较少的内存的前提下,完成占用内存较多的应用程序。我的做法是以“小口”将这些大的任务分割开来,多次处理掉。虽然这种做法,会浪费一些时间,相对于节约硬件资源还是值得的。
具体的实现方法(以BMP格式的无压缩的单色图像为例):
首先,解析好BMP文件中的file header, info header 等重要信息,以便下一步决定“一口”的大小,以及内存的使用大小等。
其次,根据header中的信息计算出应该一次处理的象素数目(我的做法是一次一行,这样算上变换过程使用的内存,也不会超过10K),计算出为了处理无效字节(例如:对其4bytes的边界字节)和unpack(对于单色16色图像的index数据会凑在一个字节里面存储以便节约存储空间)过程中需要的常量信息。
第三,使用I/O stream或其他IO将一行数据读入buffer内部。
第四,将packed的数据释放出来(注意字节的顺序,以及原始存储的方式)。
第五,通过pallette将index转换成RGB数据。
第六,可以直接显示,或者处理以后显示等。
阅读(1612) | 评论(0) | 转发(0) |