WinCE增加开机Logo及滚动条
2010-07-22 10:56
260 查看
目前手头的项目需要增加一个开机LOGO和滚动条,要求滚动条可以真实反映系统镜像加载的情况。
Wince启动过程分为三个部分,Steploader, Eboot, NK,如果***开机界面的话,主要是在Eboot以及NK部分。对于Eboot,主要是可以反映系统镜像的复制情况,系统镜像的加载占据了绝大多数启动时间,而NK部分主要是驱动的加载。这部分时间相对于系统镜像加载时间还是很小的。所以我打算把启动界面和进度条都做在Eboot里面。在网上找了些例子,一般的方式都是把一张和系统分辨率一致的BMP图片转换成数组编译到程序中,然后直接使用该数组填充显存。但是这样做有个不好的地方就是一般这个图片的尺寸较大,会导致Eboot的大小过大,甚至超过512KB。
后来发现友坚Idea6410的BSP中使用了一个简单的UI库,可以加载BMP文件,显示BMP文件。于是就直接用这个库显示LOGO。好处是不需要用一整张屏幕尺寸的BMP,仅需要LOGO本身就可以了,因为实际使用中,一般情况下背景大部分都是黑色的,只有屏幕中间显示一个LOGO,类似WindowsXP的启动界面,如下图所示。这样我们只需要保存一个LOGO就可以了,其他地方可以用黑色填充。
1. 进度条:
Step1: 在main函数中画出进度条的边框。
Step2: 移植bootpart代码到Eboot中,在BP_ReadData中更新滚动条本身,反映当前加载的情况。
2. Logo
Step1: 将BMP格式LOGO图片转换成数组,我自己写了一个小工具,可以自动生成Logo.h
Step2: 将BMP图片导入到内存
Step3: 显示LOGO到指定位置
Wince启动过程分为三个部分,Steploader, Eboot, NK,如果***开机界面的话,主要是在Eboot以及NK部分。对于Eboot,主要是可以反映系统镜像的复制情况,系统镜像的加载占据了绝大多数启动时间,而NK部分主要是驱动的加载。这部分时间相对于系统镜像加载时间还是很小的。所以我打算把启动界面和进度条都做在Eboot里面。在网上找了些例子,一般的方式都是把一张和系统分辨率一致的BMP图片转换成数组编译到程序中,然后直接使用该数组填充显存。但是这样做有个不好的地方就是一般这个图片的尺寸较大,会导致Eboot的大小过大,甚至超过512KB。
后来发现友坚Idea6410的BSP中使用了一个简单的UI库,可以加载BMP文件,显示BMP文件。于是就直接用这个库显示LOGO。好处是不需要用一整张屏幕尺寸的BMP,仅需要LOGO本身就可以了,因为实际使用中,一般情况下背景大部分都是黑色的,只有屏幕中间显示一个LOGO,类似WindowsXP的启动界面,如下图所示。这样我们只需要保存一个LOGO就可以了,其他地方可以用黑色填充。
1. 进度条:
Step1: 在main函数中画出进度条的边框。
#define LEFT 298 #define RIGHT 502 #define HEIGHT 15 for (i = LEFT + 3; i <= RIGHT - 3; i++) { *(fbp_cp + i) = 0xb5b6; *(fbp_cp + i + LCD_WIDTH * HEIGHT) = 0xb5b6; } for (i = 3 ; i <= HEIGHT - 3; i++) { *(fbp_cp + LEFT + i * LCD_WIDTH) = 0xb5b6; *(fbp_cp + RIGHT + i * LCD_WIDTH) = 0xb5b6; } *(fbp_cp + LEFT + 1 + 2 * LCD_WIDTH) = 0xb5b6; *(fbp_cp + LEFT + 2 + 1 * LCD_WIDTH) = 0xb5b6; *(fbp_cp + RIGHT - 1 + 2 * LCD_WIDTH) = 0xb5b6; *(fbp_cp + RIGHT - 2 + 1 * LCD_WIDTH) = 0xb5b6; *(fbp_cp + LEFT + 1 + 13 * LCD_WIDTH) = 0xb5b6; *(fbp_cp + LEFT + 2 + 14 * LCD_WIDTH) = 0xb5b6; *(fbp_cp + RIGHT - 1 + 13 * LCD_WIDTH) = 0xb5b6; *(fbp_cp + RIGHT - 2 + 14 * LCD_WIDTH) = 0xb5b6; }
Step2: 移植bootpart代码到Eboot中,在BP_ReadData中更新滚动条本身,反映当前加载的情况。
dwPercent = dwCurrentSects * 100 / dwTotalSects + 1; //RETAILMSG (1, (TEXT("TotalSectors=%d CurrentSectors=%d Percent=%d./r/n"), dwTotalSects, dwCurrentSects, dwPercent)); if(dwPercent == 1) { for (inum = 2; inum <= 15 -2; inum++) { memcpy(pFB + LEFT + 2 + dwPercent -1 + inum * LCD_WIDTH, blueline, 2); } } for (inum = 2; inum <= 15 -2; inum++) { memcpy(pFB + LEFT + 2 + dwPercent * 2 + inum * LCD_WIDTH, blueline, 2); }
2. Logo
Step1: 将BMP格式LOGO图片转换成数组,我自己写了一个小工具,可以自动生成Logo.h
long fileLength; defination = tbDefination.Text; StreamWriter outputFile = new StreamWriter(dictorypath + "logo.h"); outputFile.AutoFlush = true; FileStream inputFile = new FileStream(filepath, FileMode.Open); fileLength = inputFile.Length; BinaryReader binaryReader = new BinaryReader(inputFile); //PrintHeader(outputFile); outputFile.WriteLine("#ifndef _LOGO_H_"); outputFile.WriteLine("#define _LOGO_H_"); outputFile.WriteLine("/n"); outputFile.WriteLine(defination + " [" + fileLength.ToString() + "] ="); outputFile.WriteLine("{"); byte b; long count = 1; while(count <= fileLength) { b = binaryReader.ReadByte(); outputFile.Write(" 0x" + b.ToString("x02") + ","); if(count % 16 == 0 && count != 0) { outputFile.Write("/n"); } count++; } outputFile.Write("/n"); outputFile.WriteLine("};"); outputFile.WriteLine("/n"); outputFile.WriteLine("#endif // _LOGO_H_"); outputFile.Flush(); inputFile.Close(); outputFile.Close();
Step2: 将BMP图片导入到内存
s_logo.width = LCD_WIDTH; s_logo.height = LCD_HEIGHT; s_logo.lineBytes = LCD_WIDTH * 2; s_logo.startAddr = (char *)EBOOT_LOGOCACHE_UA_START; mv_loadBmp(logo, &s_logo);
Step3: 显示LOGO到指定位置
mv_drawBitmap(250, 180, &s_logo, NULL, NULL);
相关文章推荐
- 转帖:WinCE增加开机Logo及滚动条
- wince 6.0 如何添加开机logo
- WinCE6.0 修改开机Logo方法集锦(二)
- WinCE6.0 修改开机Logo方法集锦(三)
- wince 6.0在模拟器界面下修改开机logo的流程
- WinCE 6.0 开机logo修改
- WinCE开机Logo的实现(USB下载图片到nandflash)
- 通过压缩图片来添加wince 6.0的开机logo
- 天漠SOC8200(TI AM3517 ARM芯片)u-boot增加开机logo
- WinCE6.0 修改开机Logo方法
- WinCE6.0 修改开机Logo方法集锦(三)
- WinCE开机Logo的实现(USB下载图片到nandflash)
- WINCE开机显示logo之前先显示白屏的问题
- WINCE 开机logo图片转C工具,自制
- 分享实现wince开机LOGO方法
- smdkv210 uboot增加GPIO按键和开机logo的制作
- WINCE 7 开机桌面 Logo 修改
- WINCE开机显示logo之前先显示白屏的问题
- AT91SAM9263 WinCE开机Logo eboot增大到512K
- WinCE开机Logo的实现(USB下载图片到nandflash)