2015-04-15 6 views
0

Приветствие! Я работаю над проектом, где вы получили форму, где пользователь запрашивает определенное количество точек (от 1 до 10). Затем он рисует их на картинке с действием buttonclick, а затем пользователь может щелкнуть по любой точке, и линия между ними будет нарисована. До сих пор это выглядит следующим образом:C# Ссылка на форму

private void button1_Click(object sender, EventArgs e) 
    { 
     pictureBox1.CreateGraphics().Clear(this.BackColor); 
     Random r = new Random(); 
     int db = new int(); 
     Graphics rl = pictureBox1.CreateGraphics(); 
     db = Convert.ToInt32(textBox1.Text); 
     if (db > 0 && db < 11) 
     { 
      for (int i = 0; i < db; i++) 
      { 
       rl.FillRectangle(new SolidBrush(Color.Black), r.Next(4, pictureBox1.Width - 4), r.Next(4, pictureBox1.Height - 4), 5, 5); 


      } 
     } 
     else 
     { 
      MessageBox.Show("Wrong number!"); 
     } 
    } 

Это только рисует точку на форме и я хочу, чтобы сделать их связываемыми. Моя идея состоит в том, что я помещаю ее в растровое изображение, тогда я проверяю координаты x, y, и если цвет черный (что означает, что есть точка), я храню в точках 1 и 2, а затем просто делаю команду drawline следующим образом:

private bool first = false; 
    private void Picturebox_Mouse(object sender, MouseEventArgs e) 
    { 

     Bitmap bm = new Bitmap(pictureBox1.Image); 
     Color color = bm.GetPixel(e.X, e.Y); 
     if (color == Color.Black & first==false) 
     { 
      dot1.X = e.X; 
      dot1.Y = e.Y; 
      first = true; 
     } 
     if (color == Color.Black & first == true) 
     { 
      dot2.X = e.X; 
      dot2.Y = e.X; 
      first = false; 
     } 
     rl.DrawLine(new Pen(Color.Black), dot1, dot2); 
    } 

Мой вопрос в том, что мой подход прекрасен или я должен по-другому? Также, если это может работать, как я помещаю содержимое изображения в растровое изображение? Я пытался рисовать точку в битовой карте diractly затем установка pictureboxs изображение точечного рисунка:

pictureBox1.DrawToBitmap(bm, new Rectangle(r.Next(0, pictureBox1.Width - 4), r.Next(0, pictureBox1.Height - 4), 5, 5)); 
     pictureBox1.BackgroundImage = bm; 

, а также я попытался отменить это так помещая содержимое в битовой карте:

Bitmap bm = new Bitmap(pictureBox1.Image); 

, но его похоже, не работает. Могу ли я получить некоторые идеи, как это сделать? Любая идея Идея заявлена! Спасибо.

+2

Проблема с вашим подходом заключается в том, что ваши пользователи должны быть предельно точны, щелкнув по пикселям, вам лучше сохранить список точек, а затем проверить, находится ли пользователь в любом месте рядом с любым из их (установите допуск). – Sayse

ответ

0

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

Bitmap flag = new Bitmap(200, 100); 
using(Graphics flagGraphics = Graphics.FromImage(flag)) 
{ 
// draw something on flagGraphics 
pictureBox1.Image = flag; 
} 

(я на самом деле основано это на https://msdn.microsoft.com/en-us/library/ms404307(v=vs.110).aspx)

Обратите внимание, что вам нужно будет изменить тест для черного на что-то вроде if(color.ToArgb() == Color.Black.ToArgb()) или это не сработает. Также вы устанавливаете значение Y в значение X, когда я думаю, что это должен быть Y!

Смежные вопросы