让TinyGUI库支持模拟器

来源:互联网 发布:淘宝平台提成怎么算 编辑:程序博客网 时间:2024/05/22 11:55

Microsoft .Net Micro Framework 官方UI库为WPF,针对320*240LCD而言,至少额外需要150K以上RAM才能基本运行,所以推出了轻量级的图形库TinyGUI

WPF支持标准BMPJPGGIF图片显示,从使用角度来看非常方便,但是由于嵌入式LCD大都为16bit显示(RGB565格式),无论是BMP还是JPGGIF都需要进行颜色转换,此外后者还需要进行格式转换处理。以上操作,不仅导致运行速度慢,还需要一定的内存进行图形缓存。

TinyGUI的位图显示采用转换后的tinyBMP位图格式,其格式和LCD显存格式保持一致,由于图形转换工作通过工具YFTBConvert预先完成,所以在嵌入式系统上直接向显存拷贝,即可完成位图显示,所以运行速度极快。

第一个版本的库,不支持模拟器显示,这样用户在测试新应用时,必须借助实际的开发板才能看到实际的运行效果,这大大影响了用户的体验,所以重新设计了代码,让模拟器也能支持TinyGUI库的运行。

在《TinyGUI绘图示例》中我们介绍过TinyGUI的使用,当时的库还只能在开发板中运行,现在同样的示例代码,我们让其在模拟器中运行,示例代码如下:

public static void Main()

{

    uint[] colors = new uint[]{Color.Black, Color.Red,Color.Green, Color.Orange,Color.Yellow, Color.Brown,Color.Purple, Color.Gray,

                            Color.DarkGray, Color.LightGray,Color.Blue, Color.Magenta,Color.Cyan, Color.White,Color.LightGreen};

 

    Graphics.Clear(Color.Blue);

    int x, y, width, height, c;

    long index = 0;

    HardwareProvider hwp = new HardwareProvider();

    int lcd_width,lcd_height,lcd_bitsPerPixel,lcd_orientationDeg;

    hwp.GetLCDMetrics(out lcd_width, out lcd_height, out lcd_bitsPerPixel, out lcd_orientationDeg);           

    int Graphics_Width = lcd_width - 1;

    int Graphics_Height = lcd_height - 1;

    Random rnd = new Random();

    while (true)

    {

        x = rnd.Next(Graphics_Width);

        width = rnd.Next(Graphics_Width - x);

        y = rnd.Next(Graphics_Height);

        height = rnd.Next(Graphics_Height - y);

        c = rnd.Next(colors.Length - 1);

        switch (index % 3)

        {

            case 0:

                if (rnd.Next(10) > 5)

                    Graphics.DrawRectangle(x, y, width, height, colors[c]);

                else

                    Graphics.FillRectangle(x, y, width, height, colors[c]);

                break;

            case 1:

                if (rnd.Next(10) > 5)

                    Graphics.DrawEllipse(x, y, width, height, colors[c]);

                else

                    Graphics.FillEllipse(x, y, width, height, colors[c]);

                break;

            case 2:

                Graphics.DrawLine(x, y, rnd.Next(Graphics_Width), rnd.Next(Graphics_Height), colors[c]);

                break;

        }

        Graphics.FillRectangle(0, Graphics_Height-19, Graphics_Width, 19, Color.White);

        Graphics.DrawString(2, Graphics_Height-17, (index++).ToString(), Color.Blue);

        Thread.Sleep(50);

    }

}

  在模拟器中运行的效果图如下(其实在官方模拟器中也可以运行)。

  红牛模拟器下载:http://blog.csdn.net/yefanqiu/archive/2011/02/27/6212071.aspx

 

System.TinyGUI库的下载地址如下(包含文档和示例代码):

 http://www.sky-walker.com.cn/MFRelease/library/System.TinyGUI.rar

 

附:System.TinyGUI库函数说明

1.1 Clear

声明:void Clear(uint color)

参数:color– 清除后的背景色 24bit RGB

返回:

说明: 以用指定颜色清除LCD显示。

1.2 SetPixel

声明:void SetPixel(int x,int y,uint color)

参数:x,y – 屏幕坐标

      color– 颜色

返回:

说明: 画点。

1.3 GetPixel

声明:uint GetPixel (int x,int y)

参数:x,y – 屏幕坐标

返回:指定坐标的颜色

说明:返回指定坐标的颜色,有些硬件不支持该函数。

1.4 DrawLine

声明:void DrawLine(int x1, int y1, int x2, int y2, uint color)

参数:x1,y1,x2,y2 – 屏幕坐标

color– 颜色

返回:

说明:画线。

1.5 DrawRectangle

声明:void DrawRectangle(int x, int y, int width, int height, uint color)

参数:x,y – 屏幕左上角坐标

      width,height – 宽,高

color– 颜色

返回:

说明:画空心矩形。

1.6 DrawEllipse

声明:void DrawEllipse(int x, int y, int width,int height, uint color)

参数:x,y – 屏幕左上角坐标

      width,height – 宽,高

color– 颜色

返回:

说明:画空心椭圆。

1.7 DrawImage

声明:void DrawImage(int x, int y, byte[] bytData)

参数:x,y – 屏幕左上角坐标

      bytData - TinyBMP格式的图像数据

返回:

说明:位图绘制(模拟器暂不支持)。

1.8 DrawImageEx

声明:void DrawImageEx (int x, int y, byte[] bytData,uint MaskColor)

参数:x,y – 屏幕左上角坐标

      bytData - TinyBMP格式的图像数据

MaskColor– 屏蔽色

返回:

说明:位图绘制(模拟器暂不支持)。

1.9 DrawString

声明:void DrawString (int x, int y,string s, uint color)

参数:x,y – 屏幕左上角坐标

      s – 字符串

color– 字体颜色

返回:

说明:绘制字体(暂时仅支持符号和西文字符)

1.10 FillRectangle

声明:void FillRectangle (int x, int y, int width, int height, uint color)

参数:x,y – 屏幕左上角坐标

      width,height – 宽,高

color– 填充色

返回:

说明:画填充矩形。

1.11 FillEllipse

声明:void FillEllipse (int x, int y, int width, int height, uint color)

参数:x,y – 屏幕左上角坐标

      width,height – 宽,高

color– 填充色

返回:

说明:画填充椭圆。

1.12 Print

声明:void Print(string str)

参数:str – LCD显示的字符串

返回:

说明:LCD信息输出(底层LCD_Printf函数的封装)。

1.13 SuspendLayout

声明:void SuspendLayout ()

参数:

返回:

说明:挂起LCD的输出显示。

1.14 ResumeLayout

声明:void SuspendLayout ()

参数:

返回:

说明:恢复挂起的LCD输出显示。

 

MF快速参考: .NET Micro Framework 快速入门

MF中文讨论组:http://space.cnblogs.com/group/MFSoft/

【低价开发板】http://item.taobao.com/item.htm?id=7117999726

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 8个月宝宝很粘人怎么办 7个月宝宝呕吐是怎么办 一个月婴儿粘人怎么办 八个月小孩粘人怎么办 一岁的宝宝粘人怎么办 六个月宝宝粘人爱哭怎么办 摔伤结巴里面灌脓了怎么办 两周半的宝宝说话结巴怎么办 孩子两周说话结巴怎么办 名字取了生僻字考大学怎么办 淘宝客服一直不说话怎么办 淘宝客服不说话也不发货怎么办 面对不说话的客人怎么办? 卖家客服不回复怎么办 2周小孩说话结巴怎么办 微信群里只领红包不说话的人怎么办 躺在微信不说话的客户怎么办 9岁儿童说话结巴怎么办 5岁儿童说话结巴怎么办 京东客服不说话怎么办 两岁宝宝说话有点结巴怎么办 孩子不敢跟外人说话怎么办? 孩子不爱跟外人说话怎么办 别人说我不说话怎么办 衣服屁股那块变亮怎么办 小孩家里说话外面不说话怎么办 2个月小宝宝便秘怎么办 3个月小宝宝便秘怎么办 微信客户不说话怎么办 一岁半宝宝便秘肛裂怎么办 网恋现在都不说话了怎么办 宝宝便秘四天了怎么办 月子里小孩吐奶怎么办 月子里的小孩吐奶怎么办 婴儿吃多了吐奶怎么办 20个月孩子便秘怎么办 一岁宝宝肛裂怎么办 婴儿吃饱了吐奶怎么办 23天新生儿吐奶怎么办 婴儿吐奶舌苔白怎么办 宝宝吐奶酸臭味怎么办?