孝感网站建设效果,做网站的技术困难,wordpress移动端模板,成都打鱼网站建设昨天研究了一下wince开机时加入个性化的画面#xff0c;折腾了一上午#xff0c;不是花屏就是CE起不来……终于搞定#xff0c;分享一下经验吧。。。 Wince加入开机画面方法一般有以下两种#xff1a; 1、 在文件中下定义一个常量大数组#xff0c;几百K#xff0c;如con… 昨天研究了一下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 logofor(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多KBboot 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]; } 自己再准备一张160120的图片转换、编译、烧入成功 。。。