天嵌 ARM开发社区

 找回密码
 注册
查看: 1975|回复: 2

请问TQ2440_tTst\src\LCD_TFT.c中的一个函数

[复制链接]
xinghun_4 发表于 2009-12-8 16:24:17 | 显示全部楼层 |阅读模式
下面的划线函数采用的是什么划线方法????

void Glib_Line(int x1,int y1,int x2,int y2,int color)
{
        int dx,dy,e;
        dx=x2-x1;
        dy=y2-y1;
   
        if(dx>=0)
        {
                if(dy >= 0) // dy>=0
                {
                        if(dx>=dy) // 1/8 octant
                        {
                                e=dy-dx/2;
                                while(x1<=x2)
                                {
                                        PutPixel(x1,y1,color);
                                        if(e>0){y1+=1;e-=dx;}       
                                        x1+=1;
                                        e+=dy;
                                }
                        }
                        else                // 2/8 octant
                        {
                                e=dx-dy/2;
                                while(y1<=y2)
                                {
                                        PutPixel(x1,y1,color);
                                        if(e>0){x1+=1;e-=dy;}       
                                        y1+=1;
                                        e+=dx;
                                }
                        }
                }
                else                   // dy<0
                {
                        dy=-dy;   // dy=abs(dy)

                        if(dx>=dy) // 8/8 octant
                        {
                                e=dy-dx/2;
                                while(x1<=x2)
                                {
                                        PutPixel(x1,y1,color);
                                        if(e>0){y1-=1;e-=dx;}       
                                        x1+=1;
                                        e+=dy;
                                }
                        }
                        else                // 7/8 octant
                        {
                                e=dx-dy/2;
                                while(y1>=y2)
                                {
                                        PutPixel(x1,y1,color);
                                        if(e>0){x1+=1;e-=dy;}       
                                        y1-=1;
                                        e+=dx;
                                }
                        }
                }       
        }
        else //dx<0
        {
                dx=-dx;                //dx=abs(dx)
                if(dy >= 0) // dy>=0
                {
                        if(dx>=dy) // 4/8 octant
                        {
                                e=dy-dx/2;
                                while(x1>=x2)
                                {
                                        PutPixel(x1,y1,color);
                                        if(e>0){y1+=1;e-=dx;}       
                                        x1-=1;
                                        e+=dy;
                                }
                        }
                        else                // 3/8 octant
                        {
                                e=dx-dy/2;
                                while(y1<=y2)
                                {
                                        PutPixel(x1,y1,color);
                                        if(e>0){x1-=1;e-=dy;}       
                                        y1+=1;
                                        e+=dx;
                                }
                        }
                }
                else                   // dy<0
                {
                        dy=-dy;   // dy=abs(dy)

                        if(dx>=dy) // 5/8 octant
                        {
                                e=dy-dx/2;
                                while(x1>=x2)
                                {
                                        PutPixel(x1,y1,color);
                                        if(e>0){y1-=1;e-=dx;}       
                                        x1-=1;
                                        e+=dy;
                                }
                        }
                        else                // 6/8 octant
                        {
                                e=dx-dy/2;
                                while(y1>=y2)
                                {
                                        PutPixel(x1,y1,color);
                                        if(e>0){x1-=1;e-=dy;}       
                                        y1-=1;
                                        e+=dx;
                                }
                        }
                }       
        }
}
亚瑟王 发表于 2009-12-9 13:07:15 | 显示全部楼层
一个点一个点的画的。
 楼主| xinghun_4 发表于 2009-12-9 13:14:42 | 显示全部楼层
我知道啦,是中点画线算法。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-19 16:20 , Processed in 1.031250 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表