在初始化过程里,会显示一个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'/n", 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图片文件,由于androidLOGO图片加载到内存里,并且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 }

更多相关文章

  1. Android(安卓)高级自定义Toast及源码解析
  2. android中自定义标签ImageButton
  3. Android(安卓)代码模拟ListView item的点击事件并且改变背景颜色
  4. TextView 中显示图片
  5. android 代码混淆示例
  6. [转] Android(安卓)achartengine统计图
  7. Android(安卓)UI(三)SlidingMenu实现滑动菜单(详细 官方)
  8. Android(安卓)NDK 1.6
  9. Android简单实现 高德地图的定位与显示,点击按钮切换地图图层

随机推荐

  1. 颜色对应的码
  2. AndroidStudio默认继承V7包下的AppCompat
  3. Mac系统下Android(安卓)SDK更新以及ADT无
  4. android eclipse NDK 测试hello-jni ,Hell
  5. MAC android studio 新建hollowerd 提示:i
  6. android view中touch的执行顺序
  7. Android联系人自动过滤并显示“新建联系
  8. Android(安卓)USER 版本与ENG 版本的差异
  9. 【project】gen already exists but is n
  10. 解决android sdk manage打开闪退的解决方