不使用DrawLine方法绘制线条



这是我的代码,我想在不使用c#中的drawLine方法的情况下实现DDA算法。我尝试使用PutPixel方法,但没有成功。我的窗户里什么都没有。有没有什么方法可以在不使用c#中的drawLine方法的情况下绘制线条?

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        grafik = e.Graphics;
        DDACiz(ilk.X, ilk.Y, ikinci.X, ikinci.Y, grafik, Color.DarkRed);

    }
    void PutPixel(Graphics g, int x, int y, Color c) // sadece bir pixel icin
    {
        System.Drawing.Bitmap bm = new System.Drawing.Bitmap(10, 10);
        bm.SetPixel(0, 0, Color.DarkRed);
        g.DrawImageUnscaled(bm, x, y);
    }
    void DDACiz(int x1, int y1, int x2, int y2,Graphics grafik, Color renk)
    {
        int PikselSayisi;
        int dx, dy;
        float x, xFark;
        float y, yFark;
        dx = x2 - x1;
        dy = y2 - y1;
        PikselSayisi = Math.Abs(dx) > Math.Abs(dy) ? Math.Abs(dx) : Math.Abs(dy);
        xFark = (float)dx / (float)PikselSayisi;
        yFark = (float)dy / (float)PikselSayisi;
        x = (float)x1;
        y = (float)y1;
        while (PikselSayisi!=0)
        {
           PutPixel(grafik,(int)Math.Floor(x + 0.5F),(int) Math.Floor(y + 0.5f),renk);
            x += xFark;
            y += yFark;
            PikselSayisi--;
        }
    }
}
}

没有Graphics.DrawPoint方法,因此要用Graphics对象绘制单个像素,需要使用Graphics.FillRectangle

更改

void PutPixel(Graphics g, int x, int y, Color c) // sadece bir pixel icin
{
    System.Drawing.Bitmap bm = new System.Drawing.Bitmap(10, 10);
    bm.SetPixel(0, 0, Color.DarkRed);
    g.DrawImageUnscaled(bm, x, y);
}

void PutPixel(Graphics g, int x, int y, Color c) // sadece bir pixel icin
{
    g.FillRectangle(Brushes.DarkRed, x, y, 1, 1);
}

或者如果您想使用Color c:

void PutPixel(Graphics g, int x, int y, Color c) // sadece bir pixel icin
{
    using (SolidBrush brush = new SolidBrush(c) )
       g.FillRectangle(brush , x, y, 1, 1);
}

你也可以使用绘制位图的方法,但你需要使其1x1像素宽,或者确保它是透明的,也可以使用CompositingMode.SourceOver

写一个划线的方法是一个有趣的练习;对于除1.0之外的PenWidths,更不用说对于除完全不透明之外的阿尔法通道,这比看起来要困难得多,而且真的很困难。。

相关内容

  • 没有找到相关文章