新聞中心

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

        基于STM32的BMP圖片解碼系統

        作者: 時間:2012-02-06 來源:網絡 收藏


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

        本文引用地址:http://www.104case.com/article/149782.htm

        g.jpg



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

        熱式質量流量計相關文章:熱式質量流量計原理
        流量計相關文章:流量計原理

        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 武定县| 台山市| 宁武县| 泰安市| 瑞昌市| 太湖县| 双桥区| 永顺县| 旬邑县| 互助| 河北省| 江津市| 攀枝花市| 洛南县| 河间市| 桃园市| 呼和浩特市| 溆浦县| 滁州市| 准格尔旗| 黑河市| 大埔区| 南部县| 武汉市| 长子县| 山阳县| 黑河市| 高邑县| 老河口市| 锡林郭勒盟| 新巴尔虎右旗| 青龙| 清新县| 广灵县| 上饶县| 阿坝县| 垣曲县| 溧水县| 庐江县| 鄱阳县| 绩溪县|