在液晶屏上面绘制斜线

在液晶屏上面绘制斜线

ID:11897097

大小:35.00 KB

页数:4页

时间:2018-07-14

在液晶屏上面绘制斜线_第1页
在液晶屏上面绘制斜线_第2页
在液晶屏上面绘制斜线_第3页
在液晶屏上面绘制斜线_第4页
资源描述:

《在液晶屏上面绘制斜线》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、编写的在屏幕上显示横线、竖线和斜线的函数,使用一个函数统一实现。函数的说明和解释函数中的int16u为unsignedint,int8u为unsignedchar其中调用的DrvBmpDrawDot函数为描点函数,用户可以自己修改。函数的参数代表的意思是://*************************************************************///函数名称:DrvBmpDrawDot//功能:在bmp数组中绘制一个点//输入:LineX,LineY:点的坐标//ShowState:该点是黑还是白(单色图像)0-白1-黑//输出:无//备注:无

2、//*************************************************************/voidDrvBmpDrawDot(int16uLineX,int16uLineY,int8uShowState)当初在设计该程序的时候,使用的是单色图片,故描点函数中关于颜色的描述只使用了黑白两种。用户在使用时,可以根据需要自行修改描点函数。函数的实现原理任意两点之间可以形成线段,但不管线段是怎么画的,不管从左到右,从上到下,从右到左,从下到上,都可以将线段分为两类。即“/”和“”两种。斜向上或斜向下。故在函数的最开始,对输入的X坐标进行了判断,将线

3、段整理为这两种标准形式。后面又对X和Y哪个长进行的分析,这样做的原因是,一张图像,无论像素有多么大,在图像上面的线段永远都是按照下面的方式进行描绘的。肯定有其中某一个轴(X或Y)不停递增,另外一个轴隔几步递增。(斜率为1的线段两个都是同时递增)。根据这个现象,通过比较X和Y哪个长,就以哪个为基准,不停递增,另外一个则根据斜率计算是否增加。假如以X作为递增步长,Y的计算方法如下:如下图所示,Y’=(Y1-Y0)/(X1-X0)*(X’-X0)+Y0实际函数//*************************************************************/

4、//函数名称:DrvBmpDrawLine//功能:在bmp数组中绘制一条线段(可以是斜线)//输入:LineSX,LineSY:线段的起始坐标//LineEX,LineEY:线段的截止坐标//输出:无//备注:无//*************************************************************/voidDrvBmpDrawLine(int16uLineSX,int16uLineSY,int16uLineEX,int16uLineEY){int16ux0,y0,x1,y1;int16ui;int8uReverse;floatk;int1

5、6udelta;if(LineSX>LineEX){x0=LineEX;y0=LineEY;x1=LineSX;y1=LineSY;}else{x0=LineSX;y0=LineSY;x1=LineEX;y1=LineEY;}if(y0>y1){Reverse=1;}else{Reverse=0;}if((abs(x0-x1))>(abs(y0-y1)))//X轴的坐标要长一点{k=((float)(abs(y0-y1)))/((float)(abs(x0-x1)));for(i=x0;i<=x1;i++){if(Reverse==0)//向上倾斜的线段{delta=(int16

6、u)((i-x0)*k)+y0;}else//向下倾斜的线段{delta=y0-(int16u)((i-x0)*k);}DrvBmpDrawDot(i,delta,1);}}elseif(abs(y0-y1)==0)//abs(y0-y1)要大于等于abs(x0-x1),并且abs(y0-y1)为0,说明就画一个点{DrvBmpDrawDot(x0,y0,1);}else//Y轴的坐标要长一点{k=((float)(abs(x0-x1)))/((float)(abs(y0-y1)));if(Reverse==0)//向上倾斜的线段{for(i=y0;i<=y1;i++){delt

7、a=(int16u)((i-y0)*k)+x0;DrvBmpDrawDot(delta,i,1);}}else//向下倾斜的线段{for(i=y0;i>=y1;i--){delta=(int16u)((y0-i)*k)+x0;DrvBmpDrawDot(delta,i,1);}}}}作者联系方式:zhl0617@126.com

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。