在android机器里一般会显示以下图片
1、 Uboot logo
2、 Kernel logo
3、 动画
4、 关机 logo
下面针对以上四种logo说明下如何制作
一、 Uboot logo
Uboot logo 这里的图片一般很采用比较小,用24bit的图片然后用BMPInfo.exe转换成数组,这里需要注意的就是图片的宽和高都要是4的倍数,这样生成的数组才可以是4的倍数。如下代码
-
// p16DstBuf- 目标buffer
-
// p16SrcBuf-源BUFFER,一般来自一个全局数组
-
// x1, y1, -16bit图片要刷的位置
-
// nWidth, nHeight -图片宽高
-
int Draw16bitBMPBuffer(UINT16* p16DstBuf, UINT16* p16SrcBuf, int x1, int y1, int nWidth, int nHeight)
-
{
-
-
UINT16 *pu16VirBuf, *pu16Line, *pu16SrcLine;
-
int x, y;
-
-
UINT32 u32Cx=g_hCurrentDC->width;
-
UINT32 u32Cy=g_hCurrentDC->height;
-
-
for(y=y1;y<(y1+nHeight);y++){
-
pu16Line = p16DstBuf + y*u32Cx;
-
pu16SrcLine = p16SrcBuf + (y-y1)*nWidth;
-
for(x=x1;x<(x1+nWidth);x++) {
-
pu16Line[x] = pu16SrcLine[x-x1];
-
}
-
}
-
-
return 1;
-
}
-
-
-
void Draw_16bitBmpArray(UINT16* p16SrcBuf, int x1, int y1, int nWidth, int nHeight)
-
{
-
-
if(0==g_u8_InitScreenDC) {
-
InitScreenDC(CFG_LCD_FBUFFER);
-
}
-
// 进入更新后再初始化LCD
-
Draw16bitBMPBuffer(g_hCurrentDC->addr,p16SrcBuf, x1, y1, nWidth, nHeight);
-
}
-
-
-
int DrawPicture(UINT32 u32ID)
-
{
-
UINT8 g_u8Temp;
-
switch(u32ID){//if(LCD_DRAW_LOWBATTERY==u32ID)
-
case IMG_BOOT_LOGO:
-
Draw_16bitBmpArray((UINT16*)LogoBitmap, (g_hCurrentDC->width-IMG_BOOTLOGO_WIDTH)/2, (g_hCurrentDC->height-IMG_BOOTLOGO_HEIGHT)/2, IMG_BOOTLOGO_WIDTH, IMG_BOOTLOGO_HEIGHT);
-
break;
-
-
default:
-
break;
-
}
-
}
二、 制作kernel logo
1、 linux装gimp工具
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,高度
288,
15是播放动画的每秒帧率。就是一秒钟播放多少张图片,动画的最原始实现。
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, 同时压缩方式选存储
阅读(2237) | 评论(0) | 转发(1) |