让TinyGUI库支持模拟器

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

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

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

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
image.png

 

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/

相关文章
|
异构计算
FPGA强化(9):TFT_LCD液晶屏驱动
FPGA强化(9):TFT_LCD液晶屏驱动
177 0
|
开发工具 git
git clone避坑的万能步骤
git clone避坑的万能步骤
2836 1
|
C# 内存技术
【玩转.Net MF – 06】为Cortex-M3打造轻量级TinyGUI(上)
Microsoft .Net Micro Framework 官方UI库为WPF,针对320*240的LCD而言,至少额外需要150K以上RAM才能基本运行。
766 0
|
14天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
9天前
|
缓存 并行计算 PyTorch
144_推理时延优化:Profiling与瓶颈分析 - 使用PyTorch Profiler诊断推理延迟,优化矩阵运算的独特瓶颈
在2025年的大模型时代,推理时延优化已经成为部署LLM服务的关键挑战之一。随着模型规模的不断扩大(从数亿参数到数千亿甚至万亿参数),即使在最先进的硬件上,推理延迟也常常成为用户体验和系统吞吐量的主要瓶颈。
341 147
|
9天前
|
机器学习/深度学习 存储 缓存
92_自我反思提示:输出迭代优化
在大型语言模型(LLM)应用日益普及的今天,如何持续提升模型输出质量成为了业界关注的核心问题。传统的提示工程方法往往依赖一次性输入输出,难以应对复杂任务中的多轮优化需求。2025年,自我反思提示技术(Self-Reflection Prompting)作为提示工程的前沿方向,正在改变我们与LLM交互的方式。这项技术通过模拟人类的自我反思认知过程,让模型能够对自身输出进行评估、反馈和优化,从而实现输出质量的持续提升。
392 136
|
3天前
|
人工智能 移动开发 自然语言处理
阿里云百炼产品月刊【2025年9月】
本月通义千问模型大升级,新增多模态、语音、视频生成等高性能模型,支持图文理解、端到端视频生成。官网改版上线全新体验中心,推出高代码应用与智能体多模态知识融合,RAG能力增强,助力企业高效部署AI应用。
223 1
|
13天前
|
存储 人工智能 搜索推荐
终身学习型智能体
当前人工智能前沿研究的一个重要方向:构建能够自主学习、调用工具、积累经验的小型智能体(Agent)。 我们可以称这种系统为“终身学习型智能体”或“自适应认知代理”。它的设计理念就是: 不靠庞大的内置知识取胜,而是依靠高效的推理能力 + 动态获取知识的能力 + 经验积累机制。
399 135