ti图形库



因为最近需要进行这一方面的研究,所以需要接触这些东西.这次找到两篇比较好的描写文章.下面给大家放出来:

转自wang312的博客:TI图像库移植


       TI的这个图形库自下向上分为三层display driver layer(显示驱动层)graphics primitives layer(图形基元层)widget layer(小工具层),我们要做的就是写The display driver layer.也就是底层驱动层,写好了这一层,当你调用上面的graphics primitives layer画一些基本的图形的时候(如画圆),那么中间的那一个 graphics primitives layer(图形基元层)就会自己去调用display driver layer(显示驱动层)里的我们自己编写的函数(画点)来完成当前的绘制工作。同理,最上面的widget layer(小工具层)也是通过调用graphics primitives layer(图形基元层)来实现更加复杂的图形,如边栏,滑调,画线。所以就是为什么我说ti这个图是自下向上的原因。那我们要怎么来使用这个库呢?


       首先,大家把LCD连接TI的m3/IO/总线,当然我是用的IO,然后跟据LCD驱动IC来配置里面的各种寄存器,让LCD做好显示的准备工作,我传的那份LCD Display那个工程里大家可以进LCDFunc.c那个源文件去看一下,其中的LCD_Init( )这个函数就完成了这个工作。所以,在LCD显示部分,他总是最先被调用的。LCD显示的准备工作做好了,大家可以编写一些最底层的图形函数。大家看下我传上来的ti图形驱动库的文档,ti的库提供了一个结构tDisplay。这个结构是需要我们去补充的,只要你补充好了这个结构,基本上就万事大吉了。在这个结构里基本上都 是函数指针。指向了我们要补充的基本图形函数,如画点,画平水线,画竖直线,画填充矩形。大家在编写这些函数的时候要注意,一定要按照他的要求去编写,如要编写一个画水平线的函数,那么这个函数的形参和返回值都要和这个库的要求匹配起来,顺序不要搞反了,如形参传递的顺序。但是函数名称大家可以随便写,只要你在这个结构里的位置放对就好。因为他传递的只是一个函数指针,只要让库正确的找到那个函数就OK。大家把这个结构搞定后,基本就比交顺利了。那么,我们现在来看一个实际的例子。

#include <SystemInit.h>
#include <grlib.h>
tRectangle MyRect;
 

 
const tDisplay MyDisplay=
{
 sizeof(tDisplay),
 0,
 320,       // LCD width
 240,       // LCD height
 LCDPixelDraw,
 (void*)0,

 
LCDlineDrawH,
LCDlineDrawV,
LCDRectFill,
LCDColorTranslate,
LCDFlush,
};

tContext MyContext;

void main()
{
CLOCK_Init();//时钟初始化

 
GPIO_Init();//GPIO初始化

 
LCD_Init();//LCD初始化

 
LCDClearScreen(BLACK);//清屏

 
GrContextInit(&MyContext, &MyDisplay);//初始化图形描绘上下文

 
TiLogDraw(); //画LOG 

//********************************************************************** 
//显示菜单
//**********************************************************************  
      //
    // 为LCD底部填充一个的紫罗兰红的矩形
    //
    MyRect.sXMin = 0;
    MyRect.sYMin = 217;
    MyRect.sXMax = GrContextDpyWidthGet(&MyContext) - 1;
    MyRect.sYMax = 240;
    GrContextForegroundSet(&MyContext, ClrMediumVioletRed);
    GrRectFill(&MyContext, &MyRect);
   
    //
    // 为这个矩形放一个白色的边框
    //
    GrContextForegroundSet(&MyContext, ClrWhite);
    GrRectDraw(&MyContext, &MyRect);
    
  
    //
    // 放置这个应用程序的名字在矩形之中,Cm20字体,白色
    //
    GrContextFontSet(&MyContext, &g_sFontCm20);
    GrStringDrawCentered(&MyContext, "Grlib test demo", -1,
                         GrContextDpyWidthGet(&MyContext) / 2, 227, 0);
    
    
    //写LCD中用cm48i字体,绿黄色写上“Hello,eeworld !”
    GrContextForegroundSet(&MyContext, ClrLime);
    
    GrContextFontSet(&MyContext, &g_sFontCm48i); 
    
    GrStringDrawCentered(&MyContext, "Hello eeworld !", -1,
                         GrContextDpyWidthGet(&MyContext) / 2, 120, 0);
    while(true);

}

       首先我定义了一个tDisplay形的结构 Mydisplay,传入了LCD的大小和各种底层函数。我用的时候就用Mydisplay这个结构。当然,你必须还要定义一个tContext形的结构。我的为 MyContext,大家可以去看文档,这个结构中包含了绘制的上下文,如你要用什么字体,什么背景,什么前景,在这个结构中都有定义,到时我们在绘制过程之中,如需要改变我们绘制的条件,只需要改变这个结构中的成员的值即可。如我们在写字的时候,我们想用大点儿的字体,那么,只需要改变其中 ulForeground这个参数就可以了,当然,这些事情不用我们手工去一个一个的改,ti的图形驱动库提供了具体的函数,你只需要调用函数即可,如我们想要改字体,那么只需要调用GrContextFontSet这个函数,传入你正在使用的描绘上下文(我的为MyContext),和你要设置的字体即可。那么你在下次绘制的时候,只要你用MyContext这个上下文去绘制,那么那些字体正是你上次写入的字体,是不是很在意思?改颜色也是一个道理。其中字体和颜色大字可以去ti的文档的最后几页看,有样板在,你喜欢那个就写那个,非常简单。

       在这个程序中,我们先初始化LCD,然后把整屏刷黑。就可以开始图形库操作了,首先你必须调用GrContextInit这个函数,对图形库进行初 使化,你就可以开始绘制工作了。具体绘制过程大家可以对照ti图形驱动库的说明文档,一个一个的看这些函数实现什么功能,需要传入那些参数,我相信大家很 快就可以搞明白。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值