2016-05-18 4 views
0

У меня есть изображение jpeg в картинке, на загрузке страницы я рисую прямоугольник на основе координат x (150) и y (440). теперь, когда я mousemove на картинке, мне нужно определить прямоугольник по их координатам и выделить изображение. например, см. изображение ниже.Получить координаты точек между x и y

позволяет взять первый прямоугольник, на мыши перемещать любые точки внутри прямоугольника, мне нужно выполнить некоторые действия .. как найти координаты между этими x и y для прямоугольника? ..

enter image description here

+2

дал вам KNO w thee size of the photo (при условии, что вы масштабировали их до того же размера), это простая математическая проблема, которая была решена бесчисленное количество раз. – BugFinder

+2

bind MouseEnter и MouseLeave событие каждого picturbox (одно событие для каждого picturbox) и с помощью «отправителя объекта» вы можете добавить границу в событие MouseEnter и удалить границу в событии MouseLeave –

+0

Вы просто хотите проверить, находится ли точка внутри Прямоугольник? В этом случае просто определите прямоугольник минимальным и максимальным x и y и 'if ((point.x> = rectangle.min_x) && (point.x <= rectangle.max_x) && (point.y> = rectangle.min_y) && (point.y <= rectangle.max_y)) 'тогда точка находится внутри прямоугольника – samgak

ответ

1

прямоугольник имеет 4 Точки (ребра):

  • Левый
  • Топ
  • правой
  • Bottom

Если ваши координаты мыши (MouseEventArgs свойства) между ними, если указатель мыши находится в прямоугольнике.

ли координаты мыши больше right или bottom или ниже left/top, мышь находится за пределами прямоугольника.

Принимая @ samgak`s Комментарий:

if(
(point.x >= rectangle.min_x) && (point.x <= rectangle.max_x) && 
(point.y >= rectangle.min_y) && (point.y <= rectangle.max_y)) { 
    //do something 
} 

и замена point с e именно то, что вы хотите.

Может быть, следующая ссылка поможет понять:
How to check if a point is inside a rectangle

+0

Спасибо, samgak и Clijsters за ваши предложения. Это помогло мне перейти к следующему шагу .... на перемещении мыши я создал прямоугольник с использованием некоторых жестко закодированных значений и следил за приведенным выше кодом. он работает ... теперь у меня много прямоугольников с изображением мышления на мыши, как динамически создавать прямоугольник и проверять состояние. –

0

Предоставленные изображения имеют одинаковый размер и предполагая, что он хранится в переменной IMAGESIZE (типа System.Drawing.Size), то:

Size imageSize = new Size(...) // define the size here 
... 
int row = point.y/imageSize.height; 
int col = point.x/imageSize.width; 
var rect = new Rectangle(col * imageSize.Width, row * imageSize.Height, imageSize.Width, imageSize.Height); 

вы можете использовать прямоугольник, чтобы нарисовать вам рамку вокруг изображения (вы можете надуть прямоугольник на несколько пикселей)

0

Hi Samgak/Клийстерс,

  I have completed my functionality 

// уровень страницы декларации

  private Rectangle SelectedRect; 
     public List<Rectangle> listRec = new List<Rectangle>(); 

// на странице загрузки добавить все прямоугольник в rectanglelist.

private void Highlightimage_Load(object sender, EventArgs e) 

        { 

         for (int i = 0; i < table.Rows.Count; i++) 
         { 
          int x = Convert.ToInt32(table.Rows[i][0]); 
          int y = Convert.ToInt32(table.Rows[i][1]); 
          int width = Convert.ToInt32(table.Rows[i][2]); 
          int height = Convert.ToInt32(table.Rows[i][3]); 
          SelectedRect.Size = new Size(width, height); 
          SelectedRect.X = x; 
          SelectedRect.Y = y; 
          listRec.Add(SelectedRect); 

         } 

         } 

// нарисовать прямоугольник

private void pictureBox1_Paint(object sender, PaintEventArgs e) 

        { Graphics g = e.Graphics; 
          foreach (Rectangle rec in listRec) 
          { 
           Pen p = new Pen(Color.Red); 
           g.DrawRectangle(p, rec); 
          } 
      } 
      private Rectangle MakeRectangle(int x0, int y0, int x1, int y1) 
        { 
         return new Rectangle(
          Math.Min(x0, x1), 
          Math.Min(y0, y1), 
          Math.Abs(x0 - x1), 
          Math.Abs(y0 - y1)); 
        } 

// наконец на движение мыши Проверка состояния

private void pictureBox1_MouseMove(object sender, MouseEventArgs e) 
        { 
         foreach (Rectangle rec in listRec) 
         { 
          SelectedRect = MakeRectangle(rec.Left, rec.Top, rec.Right, rec.Bottom); 

          if (
        (e.X >= SelectedRect.Left) && (e.X <= SelectedRect.Right) && 
        (e.Y >= SelectedRect.Top) && (e.Y <= SelectedRect.Bottom)) 
          { 

           MessageBox.Show("test"); 
          } 
         } 
        } 

также упоминали об этом ссылка Drawing Multiple Rectangles c#

I thought this will help some one. 

    Thanks 
    Dev