天天看點

【STM32 .Net MF開發闆學習-04】TinyGUI位圖顯示

上一篇博文《TinyGUI繪圖示例》介紹了TinyGUI庫的繪圖函數,接下來就要介紹位圖顯示了,由于Cortex-M3開發闆的RAM比較小,比如EM-STM3210E僅128K,是以顯示位圖是個比較棘手的事,如320*240 16位的位圖大小就為150K,由于官方的WPF以一個BMP位圖為本底進行繪圖,是以RAM記憶體需求至少大于150K。TinyGUI則直接對顯存進行繪制,對RAM沒有直接需求,當然如果RAM夠小,整幅位圖也要分塊顯示。

由于目前Cortex-M3的晶片主頻較低,是以為了加快位圖的顯示,引進了TinyBMP位圖格式,該格式其實很簡單,一個檔案頭,資料内容和LCD顯存的資料完全一緻。

 為了便于常見的圖檔轉換為TinyBMP,我開發了一個轉換工具,程式很簡單,一般設定好轉換後的圖檔大小後,直接儲存即可。

【STM32 .Net MF開發闆學習-04】TinyGUI位圖顯示

(該工具在本示例源碼壓縮包中)

 TinyBMP可以存放在資源中,也可以存放在Flash上,但是存放在資源中有一個弊端,就是資源的大小受RAM的限制,因為TinyCLR加載應用程式時,會把所有的資源都加載到記憶體中去。而存放在Flash上沒有這個限制,隻要你一次顯示的圖檔不大于限定的RAM即可,這樣隻要Flash足夠大,你就可以存放和顯示足夠多的圖檔。

 這邊我寫了一個位圖顯示示例,就采用了這兩種方式。

【STM32 .Net MF開發闆學習-04】TinyGUI位圖顯示
轉換後的圖檔加載到資源中。
【STM32 .Net MF開發闆學習-04】TinyGUI位圖顯示

用YFAccessFlash工具下載下傳要顯示的位圖(一次下載下傳多幅)。

程式代碼如下:

using System;

using Microsoft.SPOT;

using System.Threading;

using System.TinyGUI;

namespace TinyGUI_BMP

{

    public class Program

    {

        public static void Main()

        {

            Graphics.Clear(Color.Black);

            Graphics.FillRectangle(0, 0, 240, 30, Color.DarkGray);

            Graphics.DrawString(25, 8, ".Net Micro Framework", Color.LightGreen);

            //顯示資源中的圖檔

            Graphics.DrawImage(70, 110, Resources.GetBytes(Resources.BinaryResources.YeFan));

            Thread.Sleep(3000);

            //顯示Flash中的圖檔

            int i = 0;

            uint offset_Addr = 0x002A0000;   //Custom區在Flash中的偏移位址

            byte[] bytData=new byte[0x960C]; //TinyBMP圖檔大小,四個都一樣

            Graphics.FillRectangle(0, 0, 240, 30, Color.DarkGray);

            Graphics.DrawString(60, 8, "TinyGUI Test", Color.Yellow);

            while (true)

            {

                if (++i> 3) i = 0;

                AccessFlash.Read((uint)(offset_Addr + i * bytData.Length), (uint)bytData.Length, bytData);

                Graphics.DrawImage(40, 100, bytData);

                Thread.Sleep(200);

            }

        }

    }

}           

需要注意的是,程式除了引用System.TinyGUI.dll庫,還需引用AccessFlash.dll庫,這個庫是我自行開發的,可以非常友善的在.Net MF應用程式中讀寫Flash的所有資料。

程式運作後的結果如下:

【STM32 .Net MF開發闆學習-04】TinyGUI位圖顯示

源碼下載下傳:

http://www.sky-walker.com.cn/yefan/MFV40/SourceCode/TinyGUI_BMP.rar

文章參考: 《.Net Micro Framework 快速入門》

中文讨論組:

http://space.cnblogs.com/group/MFSoft/

繼續閱讀