Bresenham算法画线

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


using System.Drawing;namespace BresenhamLine.Util
{
    class DrawLine
    {
        [System.Runtime.InteropServices.DllImport("gdi32.dll")]
        internal static extern bool SetPixel(IntPtr hdc, int x, int y, uint color);

        public void MyDrawLine(Graphics g, Point pStart, Point pEnd)
        {
            int x, y, dx, dy, m;
            float e;
            x =pStart.X;
            y =pStart.Y;
            dx = pEnd.X - pStart.X;
            dy = pEnd.Y - pStart.Y;
            m = dy / dx;
            e = m - 0.5f;

            Pen pen = new Pen(Color.Red,1);
            IntPtr hdc = g.GetHdc();

            for (int i = 1; i < dx; i++)
            {
                SetPixel(hdc, x, y, 0xffff0000);
                while (e > 0)
                {
                    y = y + 1;
                    e = e - 1;
                }
                x = x + 1;
                e = e + m;
            }
            g.ReleaseHdc(hdc);
        }
    }
}
posted @ 2012-07-18 18:25  William Jiang  阅读(333)  评论(0编辑  收藏  举报