Потеря правильного положения путем увеличения C#

У меня есть изображение в картинке box.it содержит треугольник. У меня есть еще одна коробка с картинками, в которой есть маленький Круг. я должен поставить круг на вершине треугольника. Я увеличил первое изображение (Треугольник), чтобы найти его верх, а затем поместил туда Круг. Я делаю это правильно. но когда я сбрасываю зум, вершина треугольника будет потеряна, а круг окажется в неправильном положении. мой код для увеличения:

 protected override void OnMouseWheel(MouseEventArgs e)
    {
        this.Cursor = Cursors.Default;
        float oldzoom = zoom;

        if (e.Delta > 0)
        {
            zoom += 0.625f;
            zoomPerectNum += 50;
            _txt_precentZoom.Text = zoomPerectNum.ToString() + "%";
        }

        else if (e.Delta < 0)
        {
            // zoom = Math.Max(zoom - 1F, 1F);
            zoom = zoom - 0.625F;

            if (zoom < 0.2503874F)
            {
                zoom = 0.2503874F;
            }
            else
            {
                zoomPerectNum -= 50;
                _txt_precentZoom.Text = zoomPerectNum.ToString() + "%";
            }
        }

        MouseEventArgs mouse = e as MouseEventArgs;
        Point mousePosNow = mouse.Location;

        int x = mousePosNow.X - _pic_image.Location.X;    // Where location of the mouse in the pictureframe
        int y = mousePosNow.Y - _pic_image.Location.Y;

        int oldimagex = (int)(x / oldzoom);  // Where in the IMAGE is it now
        int oldimagey = (int)(y / oldzoom);

        int newimagex = (int)(x / zoom);     // Where in the IMAGE will it be when the new zoom i made
        int newimagey = (int)(y / zoom);

        imgx = newimagex - oldimagex + imgx;  // Where to move image to keep focus on one point
        imgy = newimagey - oldimagey + imgy;

        _pic_image.Refresh();  // calls imageBox_Paint
    }

    private void imageBox_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
        e.Graphics.ScaleTransform(zoom, zoom);


        if (img != null)
        {
            e.Graphics.DrawImage(img, imgx, imgy);
        }

    }

_pic_Circle:

private void _pic_Circle_MouseDown(object sender, MouseEventArgs e)
    {
        dragging = true;
        dragPoint = new Point(e.X, e.Y);

    }
    private void _pic_Circle_MouseMove(object sender, MouseEventArgs e)
    {
        if (dragging)
        {

            _pic_Circle.Location = new Point(_pic_Circle.Location.X + e.X - dragPoint.X, _pic_Circle.Location.Y + e.Y - dragPoint.Y);
        }
    }


    private void _pic_Circle_MouseUp(object sender, MouseEventArgs e)
    {

        dragging = false;
    }

0 ответов

Другие вопросы по тегам