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對話框中傳入。
------------------------------------------------------------------------
(在下寫博客,是記下平時學習程中常遇到的問題,代碼中若有不合理之處,還望各位大佬指正)





