Wince6 Eboot中加入开机画面

作者:SUKHOI27SMK

转自:http://blog.csdn.net/sukhoi27smk/article/details/8889186


昨天研究了一下wince开机时加入个性化的画面,折腾了一上午,不是花屏就是CE起不来……终于搞定,分享一下经验吧。。。

Wince加入开机画面方法一般有以下两种:

1、 在文件中下定义一个常量大数组,几百K,如const USHORT ScreenBitmap[],在显示图片的地方利用for循坏把数组都拷贝到相应的buffer中。

2、 把图片数据存放到Flash的某位置,启动时使用特定方法把它读取。

第二种方法实现可能有一定的难度,没研究过,如有实现的,请告之俺。

第一种方法在启动的过程中,直接往显卡的 Framebuffer里面写数据。这个工作一般在Eboot里面做,如果在OS启动的时候一般就太晚了,如果不加入人为的延时,启动画面刚一显示,就到了OS画面了,看不到效果。在Eboot中,有个InitDisplay()
static void InitDisplay(void)
{
    ……    
    // Display a bitmap image on the LCD...
     //memcpy((void *)IMAGE_FRAMEBUFFER_UA_BASE, ScreenBitmap, LCD_ARRAY_SIZE_TFT_16BIT);    // for WindowsCE logo
     for(i = 0; i < 160 * 120; i++)
     {
          PWORD pWord = (PWORD)ScreenBitmap;
          PWORD pFrmBuf = (PWORD)IMAGE_FRAMEBUFFER_UA_BASE;
       
          pFrmBuf[4 * i - 2 * (i % 160)] = pWord[i];
          pFrmBuf[4 * i - 2 * (i % 160) + 1] = pWord[i];
          pFrmBuf[4 * i - 2 * (i % 160) + 160 * 2] = pWord[i];
          pFrmBuf[4 * i - 2 * (i % 160) + 1 + 160 * 2] = pWord[i];
     }
}

注 意到memcpy((void *)IMAGE_FRAMEBUFFER_UA_BASE, ScreenBitmap, LCD_ARRAY_SIZE_TFT_16BIT);显示启动画面其实就这一句,直接调用memcpy函数,把ScreenBitmap数组中的图像数据复制到 IMAGE_FRAMEBUFFER_UA_BASE 这个地址。这个其实就是直接往显卡缓冲区里面填东西了。ScreenBitmap就是一个常量数组,可以从网上找一些相关工具来生成,也可以自己写个工具,把一张BMP转成16进制的数组。

到这里,基本上就实现了开机画面,但有的会存在一些问题。

我的设备是分辨率是320*240,把一张320*240的BMP图片转换成数组后,有500多KB,boot loader没有这么大的空间(当然这个是可以修改的),再加上生成的Eboot.nb0也很大,通过并口烧入需要很长时间。有什么办法可以解决呢?……再笨你也能想到压缩,是的,压缩烧入,运行的时候再解压。在网上搜索了一下,有的是使用插值算法。弄一张小图片,把它插值到320 x 240。使用别人的一个算法,放大4倍,一个点变四个点。代码也复制过来:

for(i = 0; i < 160 * 120; i++)
     {
          PWORD pWord = (PWORD)ScreenBitmap;
          PWORD pFrmBuf = (PWORD)IMAGE_FRAMEBUFFER_UA_BASE;
       
          pFrmBuf[4 * i - 2 * (i % 160)] = pWord[i];
          pFrmBuf[4 * i - 2 * (i % 160) + 1] = pWord[i];
          pFrmBuf[4 * i - 2 * (i % 160) + 160 * 2] = pWord[i];
          pFrmBuf[4 * i - 2 * (i % 160) + 1 + 160 * 2] = pWord[i];
     }

自己再准备一张160*120的图片,转换、编译、烧入,成功 。。。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值