Wince6 Eboot中加入开机画面

昨天研究了一下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的图片,转换、编译、烧入,成功 。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hive 窗口函数_Datatist科技专栏 | Hive排序窗口函数速学教程!

作者&#xff1a;原上野设计&#xff1a;Cindy编辑&#xff1a;AI君在开发过程中经常会遇见排序的场景&#xff0c;比如取top N的问题&#xff0c;这时候row_number(),rank,dense_ran()这三个函数就派上用场了&#xff0c;其中&#xff0c;row_number()最为常用。虽然都可以排序…

arcgis利用python赋值

、 rec0 def autoIncrement(): global rec pStart 1 pInterval 1 if (rec 0): rec pStart else: rec rec pInterval return rec

人生九度

1.工作方面&#xff0c;能力不敌态度&#xff1b; 2.事业方面&#xff0c;才华不敌韧度&#xff1b; 3.知识方面&#xff0c;广博不敌深度&#xff1b; 4.思想方面&#xff0c;敏锐不敌高度&#xff1b; 5.做人方面&#xff0c;精明不敌气度&#xff1b; 6.做事方面&#xff0c…

platform Builder导出SDK

一、编译好wince系统 二、选择[platform]->[configur SDK]&#xff0c;第一次进入的话&#xff0c;会要求输入一些SDK名字等信息。完成后再一次进入才是配置SDK的属性。 三、有几项需要注意的&#xff1a; CPU选项&#xff1a;若是输出仿真器的SDK&#xff0c;这项不要选入…

idea修改代码后没有重新编译_SpringBoot中实现代码修改之后的自动更新与热加载...

在实际的开发过程中&#xff0c;我们经常修改代码之后&#xff0c;手动的重启项目&#xff0c;查看修改效果。那么有没有一种方式能够快速的、自动的帮我们将修改代码自动更新&#xff0c;避免手动重启&#xff0c;从而提高开发效率呢&#xff1f;是有的&#xff0c;对于这个功…

android 从assets和res中读取文件(转)

1. 相关文件夹介绍 在Android项目文件夹里面&#xff0c;主要的资源文件是放在res文件夹里面的。assets文件夹是存放不进行编译加工的原生文件&#xff0c;即该文件夹里面的文件不会像xml&#xff0c;java文件被预编译&#xff0c;可以存放一些图片&#xff0c;html&#xff0c…

WINCE6开机进度条

大致思路&#xff0c;在NBoot或EBoot加开机进度条&#xff0c;由于WINCE启动主要时间都花在读取NK&#xff0c;因此每读取一定的页&#xff0c;就在屏上画一条固定高度的线&#xff0c;并记录画线的位置&#xff0c;下次接着画&#xff0c;直到读取完NK&#xff0c;这样就产生的…

电脑查看wifi密码

右键 打开“网络。。。。。。”

软件oem要注意什么_做化妆品oem,选择化妆品包材要注意什么问题

化妆品企业找厂家做oem&#xff0c;一般厂家都是负责设计研发生产的&#xff0c;但是设计出来的产品包材&#xff0c;就需要找其它的包材厂家去采购了&#xff0c;很多没有经验的品牌商都不清楚找包材要怎么找&#xff0c;好看质量好就可以了吗&#xff1f;韵丽生物科技化妆品代…

等高线转dem

可以自行设置分辨率

ARM指令 LDR 和 ADR的一些区别

LDR 是ARM中的指令&#xff0c;也是伪指令。 当用 LDR r, imd // r 为寄存器&#xff0c; imd为立即数 LDR 是一条伪指令。编译器会根据 立即数的大小&#xff0c;决定用 ldr 指令或者是mov或mvn指令。 当imd能用mov或者mvn操作时&#xff0c;就将它翻译成一条mov或mvn指令。当…

阻塞 cpu占用

请问&#xff0c;windowsxp系统下&#xff0c;有一个线程A&#xff0c;此线程中需要wait一个信号&#xff0c;我有以下观点&#xff0c;请大家帮我判断一下我的观点对不对&#xff0c;谢谢&#xff01;如果我用阻塞方式&#xff0c;则一旦轮到这个线程执行&#xff0c;os只要发…

登录验证应该是进行在客户端还是服务器端_网站登录认证方式

目前大部分软件系统资源访问都是使用HTTP协议&#xff0c;HTTP是无状态的协议&#xff0c;每次请求默认都是相互独立的。但是大部分情况下我们需要记录请求资源的用户信息&#xff0c;也就是保存会话&#xff0c;从而对资源的访问做限制&#xff0c;这是我们认证功能。常用的认…

arcgis将点的属性赋值给面

例子&#xff1a;将点的编号属性列赋值到对应的面属性

关于application title一直是untitled的问题

建立了一个cocoaapplication项目&#xff0c;在Interface Builder中修改了title&#xff0c;在运行时标题始终是“Untitled”。这是我在http://stackoverflow.com/questions/4720030/cocoa-mac-application-title-says-untitled上找的解决方法。I have created a document base…

python 中文apichm_python api 中文 chm

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

arcgis投影数据计算度分秒

原始数据投影坐标系 1.先将图层坐标改为地理坐标系 2.添加字段必须是文本类型&#xff0c;否则计算不出度分秒的形式&#xff0c;只显示十进制 错误示例&#xff08;字段类型为双精度&#xff09; 正确示例&#xff08;字段类型为文本类型&#xff09;

Js实现异步刷新(原创)

看了ajax的一些资料&#xff0c;稍微学到了一点东西&#xff0c;于是写出来与大家分享&#xff0c;由于读的资料比较少和自己的看法可能不全面&#xff0c;再加上自己的拙笔&#xff0c;如果不小心写错&#xff0c;还请大家 谅解 一.ajax理论叙述 ajax并不是一个新技术&#xf…

python压缩算法_LZ77压缩算法编码原理详解(结合图片和简单代码)

前言LZ77算法是无损压缩算法&#xff0c;由以色列人Abraham Lempel发表于1977年。LZ77是典型的基于字典的压缩算法&#xff0c;现在很多压缩技术都是基于LZ77。鉴于其在数据压缩领域的地位&#xff0c;本文将结合图片和源码详细介绍其原理。原理介绍&#xff1a;首先介绍几个专…