VisualStudio实现任意情况bresenham画直线算法

  bresenham算法在计算机绘图时十分常用,其原理在网上都能找到,这里就不做赘述啦,很多小伙伴在网上找能在Visual Sudio MFC环境下实现的代码,总是遇到各种问题,不能正常运行,这里直接上能在VS上实现代码(亲测有效)。

   CDC * pDC = this->GetDC();
    int  dx, dy, x, y;
    int increment;
    bool if_xy_swap = false;
    if (abs(x1 - x0) < abs(y1 - y0))
    {   
        if_xy_swap = true;               
        swap(&x0, &y0);
        swap(&x1, &y1);
    }
    if (x0 > x1) {               
        swap(&x0, &x1);           
        swap(&y0, &y1);
    }
    increment = y0 < y1 ? 1 : -1;
    dx = x1 - x0;   
    dy = y1 - y0;
    int h = abs(2 * dy) - dx;
    if (if_xy_swap)
        pDC->SetPixel(y0, x0, RGB(255, 0, 0));
    else
        pDC->SetPixel(x0, y0, RGB(255, 0, 0));
    x = x0;     
    y = y0;
    while (x < x1)
    {
        
        if (h > 0) {
            h += abs(2 * dy) - 2 * dx;
            y += increment;
            if_xy_swap ? pDC->SetPixel(y, x, RGB(255, 0, 0)) : pDC->SetPixel(x, y, RGB(255, 0, 0));
        }
        else {
            h += abs(2 * dy);
            if_xy_swap ? pDC->SetPixel(y, x, RGB(255, 0, 0)) : pDC->SetPixel(x, y, RGB(255, 0, 0));

        }
        x++;
    }

 

大家可以去执行下,应该是能成功实现(除了垂直的直线——代码较简单,没写在里面了)。

注意:x0,y0,x1,y1分别是所画的直线两点的坐标,值在MFC对话框中传入。

 

 

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

(在下写博客,是记下平时学习程中常遇到的问题,代码中若有不合理之处,还望各位大佬指正)

 

 

你可能感兴趣的:(VisualStudio实现任意情况bresenham画直线算法)