Wince6 Eboot中加入开机画面
昨天研究了一下wince開機(jī)時(shí)加入個(gè)性化的畫面,折騰了一上午,不是花屏就是CE起不來……終于搞定,分享一下經(jīng)驗(yàn)吧。。。
Wince加入開機(jī)畫面方法一般有以下兩種:
1、?在文件中下定義一個(gè)常量大數(shù)組,幾百K,如const USHORT ScreenBitmap[],在顯示圖片的地方利用for循壞把數(shù)組都拷貝到相應(yīng)的buffer中。
2、?把圖片數(shù)據(jù)存放到Flash的某位置,啟動(dòng)時(shí)使用特定方法把它讀取。
第二種方法實(shí)現(xiàn)可能有一定的難度,沒研究過,如有實(shí)現(xiàn)的,請告之俺。
第一種方法在啟動(dòng)的過程中,直接往顯卡的 Framebuffer里面寫數(shù)據(jù)。這個(gè)工作一般在Eboot里面做,如果在OS啟動(dòng)的時(shí)候一般就太晚了,如果不加入人為的延時(shí),啟動(dòng)畫面剛一顯示,就到了OS畫面了,看不到效果。在Eboot中,有個(gè)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);顯示啟動(dòng)畫面其實(shí)就這一句,直接調(diào)用memcpy函數(shù),把ScreenBitmap數(shù)組中的圖像數(shù)據(jù)復(fù)制到?IMAGE_FRAMEBUFFER_UA_BASE?這個(gè)地址。這個(gè)其實(shí)就是直接往顯卡緩沖區(qū)里面填東西了。ScreenBitmap就是一個(gè)常量數(shù)組,可以從網(wǎng)上找一些相關(guān)工具來生成,也可以自己寫個(gè)工具,把一張BMP轉(zhuǎn)成16進(jìn)制的數(shù)組。
到這里,基本上就實(shí)現(xiàn)了開機(jī)畫面,但有的會(huì)存在一些問題。
我的設(shè)備是分辨率是320*240,把一張320*240的BMP圖片轉(zhuǎn)換成數(shù)組后,有500多KB,boot loader沒有這么大的空間(當(dāng)然這個(gè)是可以修改的),再加上生成的Eboot.nb0也很大,通過并口燒入需要很長時(shí)間。有什么辦法可以解決呢?……再笨你也能想到壓縮,是的,壓縮燒入,運(yùn)行的時(shí)候再解壓。在網(wǎng)上搜索了一下,有的是使用插值算法。弄一張小圖片,把它插值到320 x 240。使用別人的一個(gè)算法,放大4倍,一個(gè)點(diǎn)變四個(gè)點(diǎn)。代碼也復(fù)制過來:
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];
? ? ?}
自己再準(zhǔn)備一張160*120的圖片,轉(zhuǎn)換、編譯、燒入,成功 。。。
總結(jié)
以上是生活随笔為你收集整理的Wince6 Eboot中加入开机画面的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android画布demo,Androi
- 下一篇: 苹果发布全新MacBook Air笔记本