VC实现生成BMP文件(DDA算法画直线)

最近老师布置一道作业,用DDA算法画出直线,本人在此基础上实现了生成客户区内容为BMP文件的类。
其中一些细节问题值得注意,所以贴出来分享~~
DDA 算法实现画直线
中山大学 叶新州  
一.   实验内容
用DDA算法思想画出一条线段.
本程序开发于VC.Net平台,基于MFC框架,实现了根据起始坐标(有平面坐标)来画出线段、并且能保存客户区图片位未压缩BMP文件.
 
二.   算法思想
    本程序的DDA与常见的DDA算法有些不同:
采用X方向逐1递增,然后判断上个点的y坐标(OldY)和当前点的y坐标之差是否大于1,是则链接在中间链接两点(此时两点之间所有点x坐标相等)。
 
三.    算法核心代码
void CDrawLineView::DrawLineByDDA(int nStartX, int nStartY, int nEndX, int nEndY)
{
     int i;
     //定义坐标系转换
     CRect crect;
     GetClientRect(crect);
     m_nOriginY=crect.Height()-50;
     m_nOriginX=50;
     DrawCoordinate(m_nOriginX,m_nOriginY); //画出直角坐标系
     CClientDC dc(this);
     nStartX=m_nOriginX+nStartX;
     nEndX=m_nOriginX+nEndX;
     nStartY=m_nOriginY-nStartY;
     nEndY=m_nOriginY-nEndY;
     //end of 定义坐标系转换
     if (nStartX==nEndX) //若为垂直线
     {
         if (nStartY>nEndY) //为了保证nStartY小于nEndY
         {
              int t;
              t=nStartY;
              nStartY=nEndY;
              nEndY=t;
         }
         for (i=nStartY;i<=nEndY;i++)
         {
              dc.SetPixel(nStartX,i,m_cLineColor);
         }
     }
     else //不为垂直线
     {
         int x;
         int nBeginX,nStopX,nBeginY,nStopY;       
         nBeginX=nStartX;
         nStopX=nEndX;
         nBeginY=nStartY;
         nStopY=nEndY;
         if (nStartX>nEndX)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值