Нарисуйте линии на PictureBox - PullRequest
2 голосов
/ 24 ноября 2010

Мой вопрос связан с вопросом переполнения стека Рисование линий на графическом блоке с помощью щелчков мыши в C # , но когда кнопка мыши нажата, нарисованная линия исчезает.Как мне это исправить?

private void GainBox_MouseDn(object sender, MouseEventArgs e)
{
    mouse_dn = true;
}

private void GainBox_MouseMv(object sender, MouseEventArgs e)
{
    //Line drawn from lookup table
    if (mouse_dn)
    {
        img = new Bitmap(256, 256);

        //Get the coordinates (x, y) for line from lookup table.

        for (x = x1; x < x2; x++)
            img.SetPixel(x, y, Color.Red);

        //Same for y coordinate
    }
    GainBox.Refresh();
}

private void GainBox_MouseUp(object sender, MouseEventArgs e)
{
    mouse_dn = false;
}

Ответы [ 3 ]

1 голос
/ 24 ноября 2010

Вот небольшая законченная программа, которая рисует линии на основе точек (в данном случае она следует за мышью).Я думаю, вы можете преобразовать это в то, что вам нужно.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }


    // Variable that will hold the point from which to draw the next line
    Point latestPoint;


    private void GainBox_MouseDown(object sender, MouseEventArgs e)
    {
        if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
        {
            // Remember the location where the button was pressed
            latestPoint = e.Location;
        }
    }

    private void GainBox_MouseMove(object sender, MouseEventArgs e)
    {
        if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
        {
            using (Graphics g = GainBox.CreateGraphics())
            {
                // Draw next line and...
                g.DrawLine(Pens.Red, latestPoint, e.Location);

                // ... Remember the location
                latestPoint = e.Location;
            }
        }
    }
}

Одна из проблем в вашем решении заключается в том, что вы рисуете временное растровое изображение, но изображение в этом растровом изображении никогда не передается на ваше PictureBox.В представленном здесь решении не требуется никаких дополнительных растровых изображений.

0 голосов
/ 24 ноября 2010

Использование графического объекта для рисования

, например

Graphics gfx = GainBox.CreateGraphics();
gfx.Drawline([Your Parameters here]);
0 голосов
/ 24 ноября 2010

gainbox.refresh() должно оставаться в предложении if (mouse_dn).

...