Как увеличивать и уменьшать изображение, используя положение мыши на этом изображении

#c# #winforms #picturebox

#c# #winforms #picturebox

Вопрос:

Я добавил поле изображения внутри панели вкладок. Я пытаюсь применить к нему операцию увеличения и уменьшения масштаба. На самом деле обе операции работают нормально, но я хочу увеличивать и уменьшать масштаб операции, которые работают с положением мыши. означает увеличение/уменьшение масштаба изображения при наведении курсора или при наведении мыши.

Мой код приведен ниже

 protected override void OnMouseWheel(MouseEventArgs e)
{
 if (_isZoomInFlag == true)
  {
   zoomInt  ;
   if (zoomInt > 4)
   {
    zoomInt = 4;
   }
    zoomPicturebox();
  }
  if (_isZoomOutFlag == true)
  {
   zoomInt--;
   if (zoomInt == -3)
   {
    zoomInt = -2;
   }
  zoomPicturebox();
 }
}

public void zoomPicturebox()
{
            pbDisplay.Width = picWidth;
            pbDisplay.Height = picHeight;

            switch (zoomInt)
            {
                case -2:
                    pbDisplay.Width = Convert.ToInt32(((double)pbDisplay.Width) * 0.25);
                    pbDisplay.Height = Convert.ToInt32(((double)pbDisplay.Width) * picRatio);

                    break;
                case -1:
                    pbDisplay.Width = Convert.ToInt32(((double)pbDisplay.Width) * 0.5);
                    pbDisplay.Height = Convert.ToInt32(((double)pbDisplay.Width) * picRatio);

                    break;
                case 0:
                    pbDisplay.Width = picWidth;
                    pbDisplay.Height = picHeight;

                    break;
                case 1:
                    pbDisplay.Width = Convert.ToInt32(((double)pbDisplay.Width) * 1.1);
                    pbDisplay.Height = Convert.ToInt32(((double)pbDisplay.Width) * picRatio);

                    break;
                case 2:
                    pbDisplay.Width = Convert.ToInt32(((double)pbDisplay.Width) * 1.5);
                    pbDisplay.Height = Convert.ToInt32(((double)pbDisplay.Width) * picRatio);

                    break;
                case 3:
                    pbDisplay.Width = Convert.ToInt32(((double)pbDisplay.Width) * 1.75);
                    pbDisplay.Height = Convert.ToInt32(((double)pbDisplay.Width) * picRatio);
                   // lblZoom.Text = ("Zoom = 175%");
                    break;
                case 4:
                    pbDisplay.Width = Convert.ToInt32(((double)pbDisplay.Width) * 2);
                    pbDisplay.Height = Convert.ToInt32(((double)pbDisplay.Width) * picRatio);

                    break;
            }


            pbDisplay.Update();
        }
 

Увеличьте масштаб изображения

введите описание изображения здесь

Уменьшить изображение

введите описание изображения здесь

Комментарии:

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

2. @Rang Да увеличение / уменьшение масштаба при обработке положения курсора мыши когда я попробовал эту функцию, фактическое положение мыши находится в другом месте, а увеличение / уменьшение масштаба — в другом месте. Я хочу управлять увеличением / уменьшением масштаба при наведении курсора мыши.

3. да, увеличение / уменьшение масштаба в другом месте. но как его вызвать? щелчок? наведите курсор мыши? или что-то еще?

4. @Rang srry, потому что я использовал неправильное событие мыши, на самом деле это событие OnMouseWheel вместо MouseMove. Я обновил код. Это на колесе мыши…

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

Ответ №1:

в picturebox есть событие MouseWheel, но сначала вам нужно сфокусировать его.

 public Form1()
{
    InitializeComponent();

    pictureBox1.MouseWheel  = pictureBox1_MouseWheel;
}

void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
{
  if(e.Delta > 0)
  {
      //up
  }
  else
  {
      //down
  }
}

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    pictureBox1.Focus();
}
 

здесь, в событии mousedown, сфокусируйте его и сделайте событие wheel активным. затем вы можете сделать это в своем коде.

Комментарии:

1. на самом деле никаких изменений нет, его функциональность работает так же, как я хочу увеличивать и уменьшать масштаб на колесе мыши в месте расположения курсора

2. Я не вижу в коде ничего, что позволило бы увеличить масштаб в положении курсора.