日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Wince6 Eboot中加入开机画面

發布時間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的圖片,轉換、編譯、燒入,成功 。。。

總結

以上是生活随笔為你收集整理的Wince6 Eboot中加入开机画面的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。