PictureBox PaintEvent другим методом

В моей форме есть только одна картинка, и я хочу нарисовать круг с методом на этой картинке, но я не могу этого сделать, и он не работает. Метод:

private Bitmap Circle()
    {
        Bitmap bmp;
        Graphics gfx;
        SolidBrush firca_dis=new SolidBrush(Color.FromArgb(192,0,192));

            bmp = new Bitmap(40, 40);
            gfx = Graphics.FromImage(bmp);
            gfx.FillRectangle(firca_dis, 0, 0, 40, 40);

        return bmp;
    }

PictureBox

 private void pictureBox2_Paint(object sender, PaintEventArgs e)
    {
        Graphics gfx= Graphics.FromImage(Circle());
        gfx=e.Graphics;
    }

2 ответа

Решение

Вам нужно решить, что вы хотите сделать:

  • Нарисуйте в изображение или
  • рисовать на контроль?!

Ваш код представляет собой смесь обоих, поэтому он не работает..!

Вот как нарисовать на Control:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.DrawEllipse(Pens.Red, new Rectangle(3, 4, 44, 44));
    ..
}

Вот как рисовать в Image из PictureBox::

void drawIntoImage()
{
    using (Graphics G = Graphics.FromImage(pictureBox1.Image))
    {
        G.DrawEllipse(Pens.Orange, new Rectangle(13, 14, 44, 44));
        ..
    }
    // when donw with all drawing you can enforce the display update by calling:
    pictureBox1.Refresh();
}

Оба способа рисовать являются постоянными. Последний изменяется на пиксели изображения, первый - нет.

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

Конечно, для обоих способов рисования вы можете изменить все обычные части, такие как команда рисования, может быть, добавить FillEllipse перед DrawEllipse, Pens а также Brushes с их типом кисти и Colors и размеры..

private static void DrawCircle(Graphics gfx)
{    
    SolidBrush firca_dis = new SolidBrush(Color.FromArgb(192, 0, 192));
    Rectangle rec = new Rectangle(0, 0, 40, 40); //Size and location of the Circle

    gfx.FillEllipse(firca_dis, rec); //Draw a Circle and fill it
    gfx.DrawEllipse(new Pen(firca_dis), rec); //draw a the border of the cicle your choice
}
Другие вопросы по тегам