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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

高通8x12平台开机画面制作工具

發布時間:2025/4/16 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高通8x12平台开机画面制作工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

你可能在網上看到很到關于手動更換手機開機圖片的文章,想想自己的開機畫面是小兩口,好基友的照片多么個性啊。但是你有沒有發現,網上下載的什么“一鍵生成”之類的,在你的手機上不能用啊,( ⊙ o ⊙ )是的,至少我手中的是這個樣子的,有不少網上下載的實際上都是用ffmpeg.exe制作的,我沒研究過,但是看到mpeg字眼,肯定跟圖像等多媒體格式相關。到底你的手機開機畫面怎么做,這個完全取決于你手機的bootloader中怎么解析了,所以網上什么一鍵制作等都是特定機型,并不通用的。


在解決這個需求時,我只知道Python是一種腳本,我甚至不知道如何用,用在哪里,環境樣子如何!只能憑經驗摸索,再找度娘,能看懂意思。


好了,我手里開發的機器,開機圖片一般都是在ubuntu環境下用python腳本制作的.

msm8x12\device\qcom\common\display\logo\logo_gen.py如下:

[python]?view plaincopy
  • #===========================================================================??
  • ??
  • #??This?script?read?the?logo?png?and?creates?the?logo.img??
  • ??
  • #?when??????????who?????what,?where,?why??
  • #?--------??????---?????-------------------------------------------------------??
  • #?2013-04???????QRD?????init??
  • ??
  • #?Environment?requirement:??
  • #?????Python?+?PIL??
  • #?????PIL?install:??
  • #?????????(ubuntu)??sudo?apt-get?install?python-imaging??
  • #?????????(windows)?(http://www.pythonware.com/products/pil/)??
  • ??
  • #?limit:??
  • #????the?logo?png?file's?format?must?be:??
  • #??????a?Truecolour?with?alpha:?each?pixel?consists?of?four?samples,??
  • #?????????only?allow?8-bit?depeths:?red,?green,?blue,?and?alpha.??
  • #??????b?Truecolour:?each?pixel?consists?of?three?samples,??
  • #?????????only?allow?8-bit?depeths:?red,?green,?and?blue.??
  • ??
  • #?description:??
  • #????struct?logo_header?{??
  • #???????unsigned?char[8];?//?"SPLASH!!"??
  • #???????unsigned?width;???//?logo's?width,?little?endian??
  • #???????unsigned?height;??//?logo's?height,?little?endian??
  • #???????unsigned?char?reserved[512-16];??
  • #????};??
  • ??
  • #????the?logo?Image?layout:??
  • #???????logo_header?+?BGR?RAW?Data??
  • ??
  • #?===========================================================================*/??
  • ??
  • import?sys,os??
  • import?struct??
  • import?StringIO??
  • from?PIL?import?Image??
  • ??
  • ??
  • ##?get?header??
  • ??
  • def?GetImgHeader(size):??
  • ????SECTOR_SIZE_IN_BYTES?=?512???#?Header?size??
  • ??
  • ????header?=?[0?for?i?in?range(SECTOR_SIZE_IN_BYTES)]??
  • ????width,?height?=?size??
  • ??
  • ????#?magic??
  • ????header[0:7]?=?[ord('S'),ord('P'),?ord('L'),?ord('A'),??
  • ???????????????????ord('S'),ord('H'),?ord('!'),?ord('!')]??
  • ??
  • ????#?width??
  • ????header[8]?=?(?width????????&?0xFF)??
  • ????header[9]?=?((width?>>?8?)?&?0xFF)??
  • ????header[10]=?((width?>>?16)?&?0xFF)??
  • ????header[11]=?((width?>>?24)?&?0xFF)??
  • ??
  • ????#?height??
  • ????header[12]=?(?height????????&?0xFF)??
  • ????header[13]=?((height?>>??8)?&?0xFF)??
  • ????header[14]=?((height?>>?16)?&?0xFF)??
  • ????header[15]=?((height?>>?24)?&?0xFF)??
  • ??
  • ????output?=?StringIO.StringIO()??
  • ????for?i?in?header:??
  • ????????output.write(struct.pack("B",?i))??
  • ????content?=?output.getvalue()??
  • ????output.close()??
  • ??
  • ????#?only?need?512?bytes??
  • ????return?content[:512]??
  • ??
  • ??
  • ##?get?png?raw?data?:?BGR?Interleaved??
  • ??
  • def?CheckImage(mode):??
  • ????if?mode?==?"RGB"?or?mode?==?"RGBA":??
  • ????????return??
  • ????print?"error:?need?RGB?or?RGBA?format?with?8?bit?depths"??
  • ????sys.exit()??
  • ??
  • def?GetImageBody(img):??
  • ????color?=?(0,?0,?0)??
  • ????if?img.mode?==?"RGB":??
  • ????????img.load()??
  • ????????r,?g,?b?=?img.split()??
  • ??
  • ????if?img.mode?==?"RGBA":??
  • ????????background?=?Image.new("RGB",?img.size,?color)??
  • ????????img.load()??
  • ????????background.paste(img,?mask=img.split()[3])?#?3?is?the?alpha?channel??
  • ????????r,?g,?b?=?background.split()??
  • ??
  • ????return?Image.merge("RGB",(b,g,r)).tostring()??
  • ??
  • ??
  • ##?make?a?image??
  • ??
  • def?MakeLogoImage(logo,?out):??
  • ????img?=?Image.open(logo)??
  • ????CheckImage(img.mode)??
  • ????file?=?open(out,?"wb")??
  • ????file.write(GetImgHeader(img.size))??
  • ????file.write(GetImageBody(img))??
  • ????file.close()??
  • ??
  • ??
  • ##?mian??
  • ??
  • def?ShowUsage():??
  • ????print?"?usage:?python?logo_gen.py?[logo.png]"??
  • ??
  • def?GetPNGFile():??
  • ????infile?=?"logo.png"?#default?file?name??
  • ????num?=?len(sys.argv)??
  • ????if?num?>?2:??
  • ????????ShowUsage()??
  • ????????sys.exit();?#?error?arg??
  • ??
  • ????if?num?==?2:??
  • ????????infile?=?sys.argv[1]??
  • ??
  • ????if?os.access(infile,?os.R_OK)?!=?True:??
  • ????????ShowUsage()??
  • ????????sys.exit();?#?error?file??
  • ????return?infile??
  • ??
  • if?__name__?==?"__main__":??
  • ????MakeLogoImage(GetPNGFile(),?"splash.img")??
  • <??


  • 說明中表示用python和PIL(python Image Library)制作,PIL是另外下載安裝的庫,圖片資源必須為png,且色深為8-bit的RGB或者RGBA格式。

    生成的splash.img格式為文件頭+BGR原始數據:文件頭如上面結構體一樣排列,BGR就是將原B,R通道數據交換,把這樣的數據順序存在另一個文件中改名為splash.img即可。


    在這個腳本下還有個腳本使用說明:python ./logo_gen.py snapdragon.png,實際上看代碼,如果不指定源png圖片,會自動尋找logo.png。


    現在需求來了,小客戶很多,他們需求機器少,但卻要求換他們的開機logo,這個工作需要他們來做,難道客戶要去安裝ubuntu再去裝python環境再去做?那不行,客戶不是開發者,于是想辦法在windows系統下做個脫離環境的工具。要么根據上面python的代碼解析函數意義,再用C代碼去模擬出來,但是要點時間,于是上網搜搜,有個第三方python庫叫py2exe,它能把python腳本連同各種依賴打包在一個文件夾下,這樣就脫離環境了。我的做法具體為:

    windows XP系統安裝,

    python2.7.3

    py2exe-0.6.9.win32-py2.7

    PIL-1.1.7.win32-py2.7下載地址http://www.pythonware.com/products/pil/index.htm

    軟件怎么裝不說了。其中后兩個是python的庫,下載完直接下一步安裝,會直接安裝到python安裝目錄下的Lib\site-packages。第二個py2exe下載時要看清與python版本必須一致,不然不給安裝的。另python安裝時把其安裝的路徑加入到環境變量Path,這樣任何地方才能識別到python。


    windows下環境都弄好了,在CMD下運行python logo_gen xxx.png,出錯嘍,



    為啥ubuntu與windows下同一腳本運行不同呢?!

    r, g, b = img.split()這是出錯的地方,'NoneType' 感覺像空值造成的,

    經網上查詢,在腳本中出錯的上方添加img.load()即可,如下

    。。。

    ? ? ? ? img.load()
    ? ? ? ? r, g, b = img.split()

    。。。

    編譯還是錯了,如下



    識別錯誤!用NotePad++打開腳本,再打開“顯示所有字符”如下


    看見么╮(╯_╰)╭,其他對齊用的是空格,img.loader()用的卻是Tab,改成空格,運行結果正確!

    好了 ,我要做的是可執行文件,脫離python環境,不急,前面不是裝了py2exe庫么,它就是干這個的。

    在logo_gen.py同目錄下,新建一個名為mysetup.py設置腳本,內容為:

    [python]?view plaincopy
  • #?mysetup.py?????
  • from?distutils.core?import?setup?????
  • import?py2exe?????
  • setup(console=["logo_gen.py"])??

  • 其中中括號內就是你要轉換為exe的python腳本名,上面兩行是必須這樣寫的。至于設置腳本的語法,上網搜去吧,我也不知道,暫時需要到哪我就用到哪。

    cmd下運行python mysetup.py py2exe,會出現許多打印信息,最終生成2個文件夾build和dist,如下圖


    這個dist目錄就是最終我的需求,可執行文件及其依賴都在這,將png圖面改名為logo.png放到dist目錄,進入dist目錄,雙擊運行logo_gen.exe你會看見生成了splash.img,這就是開機圖片要燒寫的鏡像。

    總結

    以上是生活随笔為你收集整理的高通8x12平台开机画面制作工具的全部內容,希望文章能夠幫你解決所遇到的問題。

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