【STM32 .Net MF开发板学习-04】TinyGUI位图显示

简介:

上一篇博文《TinyGUI绘图示例》介绍了TinyGUI库的绘图函数,接下来就要介绍位图显示了,由于Cortex-M3开发板的RAM比较小,比如EM-STM3210E128K,所以显示位图是个比较棘手的事,如320*240 16位的位图大小就为150K,由于官方的WPF以一个BMP位图为本底进行绘图,所以RAM内存需求至少大于150KTinyGUI则直接对显存进行绘制,对RAM没有直接需求,当然如果RAM够小,整幅位图也要分块显示。

 由于目前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.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的所有数据。

程序运行后的结果如下:

 

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

 

 

 








本文转自yefanqiu51CTO博客,原文链接: http://blog.51cto.com/yfsoft/343818 ,如需转载请自行联系原作者
相关文章
【STM32 .Net MF开发板学习-12】跳动的音符(PWM合成)
PWM除了可驱动电机外,还可以设置不同频率以模拟不同音阶的音符输出,实际测试发现,声音还是蛮动听的,不过常见的有源蜂鸣器可不行(红牛开发板自带),需要专门采购无源蜂鸣器,这二者的区别是有源蜂鸣器通电就响,而无源蜂鸣器需要输入一定频率的信号才能发声。
863 0
|
Windows
在Corex-M3开发板上移植.Net Micro Framework系列文章
.NET Micro Framework 将 .NET 的可靠性和效率与 Visual Studio® 的高生产率结合起来,以针对价格较低、资源受限的小型设备开发应用程序,可帮助人们使用熟悉的 Visual Studio 工具来构建托管的嵌入式应用程序。
693 0
|
芯片
免费发放firmwave,打造史上最低价.Net MF开发板
很久以前就曾多方位思考限制.Net Micro Framework发展的原因是什么?在物联网和Cortex-M3大行其道的今天,应该有更大的发展空间才对,为什么现在还是关注者甚少?我想主要原因有三,一、源码代码是否开源;二、是否有低价开发板;三、TinyCLR是否够小。
867 0
|
开发工具
【STM32 .Net MF开发板学习-01】Hello world
我们抛弃掉所谓的模拟器,我们在真机上体验一下运行最简单的“Hello world”程序的效果。
802 0
【STM32 .Net MF开发板学习-02】GPIO测试
示例很简单,主要是按钮和LED灯的测试,红牛和EM-STM3210E的按钮和LED有所不同,所以有针对性的对二者pin都做了定义(这些信息,你可以直接看开发板相对应的原理图,很容易就可以获得相关Pin脚的定义)。
579 0
【STM32 .Net MF开发板学习-03】TinyGUI绘图示例
.Net Micro Framework官方图形库是WPF,由于目前ST Cortex-M3开发板RAM太小,最大才512K(常见是128K或256k),并且Cortex-M3的CPU主频也不太高,运行WPF图形框架显得过于重了,所以我这边推出了轻量级图形库TinyGUI
678 0
|
内存技术
【STM32 .Net MF开发板学习-04】TinyGUI位图显示
由于Cortex-M3开发板的RAM比较小,比如EM-STM3210E仅128K,所以显示位图是个比较棘手的事,如320*240 16位的位图大小就为150K,由于官方的WPF以一个BMP位图为本底进行绘图,所以RAM内存需求至少大于150K。
694 0
【STM32 .Net MF开发板学习-05】PC通过Modbus协议远程操控开发板
本示例包含两部分,一部分运行到开发板上,作为Modbus RTU Slave服务存在;另一部分典型的.Net Framework代码,实现了Modbus RTU Client端功能,可以借助开发板上的Slave服务控制开发板上的LED灯和获取按钮状态。
837 0
【STM32 .Net MF开发板学习-06】蜂鸣器和LED数码管显示
无论是蜂鸣器还是LED数码管显示,其实这二者对代码编写来说没有太大区别,都是GPIO的一个典型应用。红牛开发板有一个蜂鸣器,而EM-STM3210E有一个四位LED数码管,代码都相对简单,不值的为二者单独写一篇博文,所以二者合一以一篇文章来说明,不过两个示例代码是独立的。
732 0
|
内存技术
【STM32 .Net MF开发板学习-07】全屏位图无闪烁显示
16位320*240的位图大小为150K字节,而对于EM-STM3210E开发板来说,RAM仅有128K,远不够显示一幅完整位图,红牛的开发板即使有256K的RAM,但是刨去堆、栈及TinyCLR本身所用,剩下的也不多了,所以要显示全屏位图,必须分块显示。
588 0