当前位置:操作系统 > 安卓/Android >>

Android培训班(22)

在初始化过程里,会显示一个LOGO图片,那么它是怎么实现显示这个图片的呢?它的代码如下:

#001  /* 565RLE image format: [count(2 bytes), rle(2 bytes)] */

#002 

#003  int load_565rle_image(char *fn)

#004  {

这段代码是加载565RLE格式的LOGO图片,函数的参数是图片路径。

 

#005      struct FB fb;

#006      struct stat s;

#007      unsigned short *data, *bits, *ptr;

#008      unsigned count, max;

#009      int fd;

#010 

#011      if (vt_set_mode(1))

#012          return -1;

这段代码是设置显示输出为图片模式。

 

#013 

#014      fd = open(fn, O_RDONLY);

#015      if (fd < 0) {

#016          ERROR("cannot open %s ", fn);

#017          goto fail_restore_text;

#018      }

这段代码是打开要显示的图片。

 

#019 

#020      if (fstat(fd, &s) < 0) {

#021          goto fail_close_file;

#022      }

这段代码是获取打开文件的信息,比如文件的大小。

 

#023 

#024      data = mmap(0, s.st_size, PROT_READ, MAP_SHARED, fd, 0);

#025      if (data == MAP_FAILED)

#026          goto fail_close_file;

这段代码是映射图片文件到内存。

 

#027 

#028      if (fb_open(&fb))

#029          goto fail_unmap_data;

这段代码是打开显示缓存内存,以便把图片数据放到显示缓存里。

 

#030 

#031      max = fb_width(&fb) * fb_height(&fb);

#032      ptr = data;

#033      count = s.st_size;

#034      bits = fb.bits;

#035      while (count > 3) {

#036          unsigned n = ptr[0];

#037          if (n > max)

#038              break;

#039          android_memset16(bits, ptr[1], n << 1);

#040          bits += n;

#041          max -= n;

#042          ptr += 2;

#043          count -= 4;

#044      }

这段代码是把图片数据填入显示缓存。

 

#045 

#046      munmap(data, s.st_size);

#047      fb_update(&fb);

这段代码是更新显示缓存,并把LOGO显示出来。

 

#048      fb_close(&fb);

#049      close(fd);

#050      unlink(fn);

这段代码关闭上面打开的资源,并删除LOGO图片文件,由于android把LOGO图片加载到内存里,并且LOGO显示完成后,再没有作用了,及时回收资源。如果想不删除这个图片,就需要把这行代码删除掉,或者每次显示前动态地拷贝到这里。

 

#051      return 0;

#052 

#053  fail_unmap_data:

#054      munmap(data, s.st_size);   

#055  fail_close_file:

#056      close(fd);

#057  fail_restore_text:

#058      vt_set_mode(0);

#059      return -1;

这段代码是处理失败情况。

 

#060  }

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,