由于目前Cortex-M3的晶片主頻較低,是以為了加快位圖的顯示,引進了TinyBMP位圖格式,該格式其實很簡單,一個檔案頭,資料内容和LCD顯存的資料完全一緻。
為了便于常見的圖檔轉換為TinyBMP,我開發了一個轉換工具,程式很簡單,一般設定好轉換後的圖檔大小後,直接儲存即可。
(該工具在本示例源碼壓縮包中)
TinyBMP可以存放在資源中,也可以存放在Flash上,但是存放在資源中有一個弊端,就是資源的大小受RAM的限制,因為TinyCLR加載應用程式時,會把所有的資源都加載到記憶體中去。而存放在Flash上沒有這個限制,隻要你一次顯示的圖檔不大于限定的RAM即可,這樣隻要Flash足夠大,你就可以存放和顯示足夠多的圖檔。
這邊我寫了一個位圖顯示示例,就采用了這兩種方式。
轉換後的圖檔加載到資源中。
用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的所有資料。
程式運作後的結果如下:
-----------------------------------------------------------------------------------------
<a href="http://space.cnblogs.com/group/MFSoft/"></a>