Chinaunix首页 | 论坛 | 博客
  • 博客访问: 475528
  • 博文数量: 92
  • 博客积分: 3146
  • 博客等级: 中校
  • 技术积分: 2314
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-27 10:20
文章分类

全部博文(92)

文章存档

2014年(3)

2013年(17)

2012年(16)

2011年(22)

2010年(34)

分类: Android平台

2013-03-19 14:32:55

android机器里一般会显示以下图片

1、  Uboot logo

2、  Kernel logo

3、  动画

4、  关机 logo

下面针对以上四种logo说明下如何制作

一、 Uboot logo

Uboot logo 这里的图片一般很采用比较小,用24bit的图片然后用BMPInfo.exe转换成数组,这里需要注意的就是图片的宽和高都要是4的倍数,这样生成的数组才可以是4的倍数。如下代码

点击(此处)折叠或打开

  1. // p16DstBuf- 目标buffer
  2. // p16SrcBuf-源BUFFER,一般来自一个全局数组
  3. // x1, y1, -16bit图片要刷的位置
  4. // nWidth, nHeight -图片宽高
  5. int Draw16bitBMPBuffer(UINT16* p16DstBuf, UINT16* p16SrcBuf, int x1, int y1, int nWidth, int nHeight)
  6. {

  7.     UINT16 *pu16VirBuf, *pu16Line, *pu16SrcLine;
  8.     int x, y;

  9.     UINT32 u32Cx=g_hCurrentDC->width;
  10.     UINT32 u32Cy=g_hCurrentDC->height;

  11.     for(y=y1;y<(y1+nHeight);y++){
  12.         pu16Line = p16DstBuf + y*u32Cx;
  13.         pu16SrcLine = p16SrcBuf + (y-y1)*nWidth;
  14.         for(x=x1;x<(x1+nWidth);x++) {
  15.                 pu16Line[x] = pu16SrcLine[x-x1];
  16.         }
  17.     }    

  18.     return 1;
  19. }


  20. void Draw_16bitBmpArray(UINT16* p16SrcBuf, int x1, int y1, int nWidth, int nHeight)
  21. {

  22.     if(0==g_u8_InitScreenDC) {
  23.      InitScreenDC(CFG_LCD_FBUFFER);
  24.     }
  25. // 进入更新后再初始化LCD
  26.     Draw16bitBMPBuffer(g_hCurrentDC->addr,p16SrcBuf, x1, y1, nWidth, nHeight);
  27. }


  28. int DrawPicture(UINT32 u32ID)
  29. {
  30.     UINT8 g_u8Temp;
  31.     switch(u32ID){//if(LCD_DRAW_LOWBATTERY==u32ID)
  32.         case IMG_BOOT_LOGO:
  33.         Draw_16bitBmpArray((UINT16*)LogoBitmap, (g_hCurrentDC->width-IMG_BOOTLOGO_WIDTH)/2, (g_hCurrentDC->height-IMG_BOOTLOGO_HEIGHT)/2, IMG_BOOTLOGO_WIDTH, IMG_BOOTLOGO_HEIGHT);
  34.                         break;
  35.             
  36.         default:
  37.              break;                
  38.         }                
  39. }



二、 制作kernel logo
1linuxgimp工具

       2、 转换图片

      pngtopnm logo.png | ppmquant -fs 224 | pnmtoplainpnm > logo_linux_clut224.ppm 转换图片png为ppm格式且为224色。

将生成的logo_linux_clut224.ppm 放到drivers/video/logo/ 目录,重新make即可

    三、 动画 logo

  1、 首先要明白,Android 系统的开机动画是一个zip文件,首先是读取/data/local/bootanimation.zip, 如果在那里找不到,就去读取默认的/system/media/bootanimation.zip,而所谓动画只是循环的播放这个zip里的很多png图片
 2、bootanimation.zip你解压发现里面有三个部分(也有可能只有两个部分)
    part0 文件夹
(里面包含.png文件)
    part1 文件夹
    desc.txt  (这个文本是用来告诉系统,如何使用图片目录来实现动画的)
    下面描述下desc.txt的作用,就是用来描述动画如何播放的问题,例如:
     480 288 15        // 图片宽度480,高度28815是播放动画的每秒帧率。就是一秒钟播放多少张图片,动画的最原始实现。
     p 1 0 part0        // p
是一个分隔符,1 表示播放一遍,0表示播放完后停顿 0 帧,最后是图片所在的zip包里的目录名。比如你的zip包里最后是这么个结构
                                      

  
根据这个语法,我们也可以自定义各种动画形式,例如下面所示:
  p 2 30 part0        
part0里的图片,播放2遍,播放完一遍后停顿30帧,因为我们之前设置了帧率是15帧每秒,那么这里就等于停顿2秒。
  p 0 0  part1        
part1里的图片无限循环播放,每次播放不停顿。

如果你设置的宽度和高度不充满屏幕也没关系,剩余区域,系统会填充黑色。如果你设置的宽度和高度大过屏幕,系统会自动裁剪显示居中部分的图片区域。
3、 如何打包成.zip文件
    将上述文件夹+desc.txt无压缩率格式打包成bootanimation.zip, 注意一定要选择无压缩率,无损压缩。另外保持压缩包后的目录结构。这里需要注意的是在选择压缩文件格式时候必须选.zip,  同时压缩方式选存储
     
    
    



阅读(1820) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~