天天看點

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

 由于目前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.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位圖顯示

-----------------------------------------------------------------------------------------

<a href="http://space.cnblogs.com/group/MFSoft/"></a>

繼續閱讀