Chinaunix首页 | 论坛 | 博客
  • 博客访问: 849156
  • 博文数量: 168
  • 博客积分: 5431
  • 博客等级: 大校
  • 技术积分: 1560
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-22 11:56
文章存档

2015年(2)

2014年(1)

2013年(12)

2012年(12)

2011年(15)

2010年(5)

2009年(16)

2008年(41)

2007年(64)

分类: C/C++

2007-11-19 11:51:42

嵌入式系统上数字图像显示,处理过程内存使用的思考

    很多的情况下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数据。
    第六,可以直接显示,或者处理以后显示等。
阅读(1607) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~