2014-12-06 4 views
-1

Существует только один PictureBox в моей форме, и я хочу DrawCircle с методом на этом PictureBox, но я не могу сделать это и не working.The метод: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; 
    } 
+0

Вы должны сделать свою функцию «графикой» в качестве параметра. – SLaks

+0

@SLaks не работает –

+0

Ваш вопрос не имеет большого смысла. В обработчике метода 'Paint' вы должны _одно только рисовать на экземпляр' e.Graphics'. Но что вы хотите здесь сделать? Вы хотите нарисовать круг каждый раз, когда возникает событие 'PictureBox'' Paint'? Вы хотите, чтобы свойство 'PictureBox.Image' было настроено на« битмап », где вы уже нарисовали круг? Что-то другое? См. Http://stackoverflow.com/help/how-to-ask и http://stackoverflow.com/help/mcve –

ответ

3

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

  • Ничья в изображение или
  • нарисовать на управление?!

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

Вот как рисовать на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 и размеры ..

0
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 
} 
Смежные вопросы