<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于STM32的BMP圖片解碼系統

基于STM32的BMP圖片解碼系統

作者: 時(shí)間:2012-02-06 來(lái)源:網(wǎng)絡(luò ) 收藏


3 算法
3.1 文件組成
文件由文件頭、位圖信息頭、顏色信息和圖形數據4部分組成。BMP文件頭數據結構舍有BMP文件的類(lèi)型、文件大小和位圖起始位置等信息,它占14個(gè)字節。BMP位圖信息頭數據用予說(shuō)明位圖的尺寸等信息,它占40個(gè)字節。BMP顏色表用于說(shuō)明位圖中的顏色,它有若干個(gè)表項,每一個(gè)表項定義一種顏色。位圖信息頭和顏色表組成位圖信息,位圖數據記錄了位圖的每一個(gè)像素值,記錄順序是在掃描行內是從左到右,掃描行之間是從下到上,Windows規定一個(gè)掃描行所占的字節數必須是4的倍數(即以long為單位),不足的以0填充。
3.2 BMP的讀取顯示算法
首先根據讀取到的BMP數據得到BMP的頭部信息,得到文件類(lèi)型,大小和文件的起始位置,然后讀取BMP位圖信息頭,這里面記錄了圖片的格式的信息,如BMP圖片的寬度和高度,以及每個(gè)像素所占的位數,下面舉例來(lái)說(shuō)明BMP圖片的過(guò)程。
常用的BMP圖片格式有24位真彩圖,16位圖,和32位圖,過(guò)程略有不同,下面分別介紹,首先是24位圖,當根據BMP的頭文件信息得到數據的起始地址之后,從起始地址開(kāi)始讀數據,假設每次讀入512字節,由于A(yíng)M240320TFT采用16位的565方式顯示,即就是說(shuō)需要把每個(gè)像素所占的24位致?lián)?,也就?個(gè)字節,轉換為16位的數據,即2個(gè)字節,這里以前3個(gè)字節為例來(lái)說(shuō)明解碼算法:
d.jpg
其中codor為需要提供給液晶顯示器每個(gè)像素點(diǎn)的顏色值,tmp_color為解碼過(guò)程中的臨時(shí)變量,數組temp存儲24位格式的像素值。同樣也可以解碼16位顏色圖和32位顏色圖,解碼16位顏色圖的算法比較簡(jiǎn)單,只需要解出連續的兩個(gè)值然后組合成16位的565格式的顏色值送到液晶顯示,其解碼算法如下:
e.jpg
在32位圖的解碼過(guò)程中需要注意一個(gè)問(wèn)題,就是32位圖中實(shí)際上只使用了24位存儲像素值,也就是32位中的前3位,最后一位沒(méi)有存儲像素值信息,所以在解碼的過(guò)程中只需要解碼前3位,將第4位跳過(guò),具體解碼算法如下:
f.jpg
3.3 解碼并顯示BMP圖片程序
在BMP圖片解碼過(guò)程中,有兩種方式:一種是將BMP圖片數據從外部SD卡中調入內存中,從內存中解碼,解碼后將圖片數據顯示在TFT屏上;第二種方式是一邊從SD卡中讀數據一邊解碼顯示,兩種方式各有優(yōu)缺點(diǎn)。第一種方式的優(yōu)點(diǎn)是由于整個(gè)解碼過(guò)程全部在內存中進(jìn)行,所以解碼的速度比較快,顯示圖片的速度快。由于一般處理器內部RAM都是有限的,而這種方式對RAM的消耗特別大,所以采用這種方式需要外擴SRAM。第二種方式是從SD卡總邊讀取邊解碼,例如一般FAT32文件簇的大小都是512字節,所以可以以簇為單位來(lái)讀取圖片信息,然后顯示接著(zhù)讀取下一簇,這種方式的缺點(diǎn)是,由于SD卡的SPI方式速度較慢,解碼一張320x240的圖片大概需要1s,但是這種方式對的內存消耗比較低,比較適合于沒(méi)有外部RAM的。本中,采用第二種方式進(jìn)行解碼顯示,采用外部8 MHz的晶振作為輸入時(shí)鐘,內部鎖相環(huán)將時(shí)鐘倍頻到72 MHz作為系統時(shí)鐘,采用GPIO口模擬8080時(shí)序并行驅動(dòng)2.8寸TFT屏,屏幕分辨率為320x240,處理器首先完成各種外設初始化,接著(zhù)初始化FAT文件系統,然后從SD卡中讀取一簇的數據,解碼顯示,接著(zhù)讀取下一簇。整個(gè)程序的流程圖如圖4所示。

本文引用地址:http://dyxdggzs.com/article/149782.htm

g.jpg



4 結論
本文采用了ARM的Cortex-M3內核的,它最新ARMv7架構,設計了一個(gè)BMP圖片解碼系統,完成了在2.8寸TFT屏上解碼并顯示BMP圖片,通過(guò)讀取SD卡中的圖片數據,邊讀取邊解碼顯示,實(shí)現了在內存有限的處理器中的BMP圖片的解碼算法。

熱式質(zhì)量流量計相關(guān)文章:熱式質(zhì)量流量計原理
流量計相關(guān)文章:流量計原理

上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: 解碼 系統 圖片 BMP STM32 基于

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>