Переместите изображение внутри Picturebox, используя события мыши - PullRequest
0 голосов
/ 03 октября 2018

У меня есть этот код, куда я загружаю / помещаю изображение в поле для картинок.Теперь я хочу перетащить его в pictureBox с помощью MouseEvents.Как это сделать, когда мое изображение нарисовано с использованием другого класса?

Класс изображения

public void ImageDrawing(Bitmap bm, RectangleF rect, PaintEventArgs e)
    {
        this.image = bm;
        this.width = rect.Width;
        this.height = rect.Height;
        this.rect = rect;
        Graphics g = e.Graphics;
        bm = ImageClass.GrayscaleImage(bm);
        bm.MakeTransparent(Color.White);
        g.DrawImage(bm, rect);
    }

Основная форма

private void btn_Browse_Click(object sender, EventArgs e)
    {
        PaintImage();
    }
    public void PaintImage()
    {
        buttons = (Shape.ShapeType)System.Enum.Parse(typeof(Shape.ShapeType), "image");
        // open file dialog   
        OpenFileDialog open = new OpenFileDialog();
        // image filters  
        open.Filter = "Image Files(*.jpg; *.jpeg; *.gif; *.bmp); *.PNG|*.jpg; *.jpeg; *.gif; *.bmp; *.PNG";
        if (open.ShowDialog() == DialogResult.OK)
        {
            //Display image in picture box  
            string strType = Path.GetExtension(open.FileName);
            FileInfo fs = new FileInfo(open.FileName);
            long fileSize = fs.Length / 1024;
            ImageBitmap = new Bitmap(open.FileName);
        }
        imageHeight = ImageBitmap.Height / 3f;
        imageWidth = ImageBitmap.Width / 3f;
        imageX = (shape.center.X - (imageWidth / 2));
        imageY = (shape.center.Y - (imageHeight / 2));
        imageRect = new RectangleF(imageX, imageY, imageWidth, imageHeight);
        pictureBox_Canvass.Refresh();
    }

1 Ответ

0 голосов
/ 07 октября 2018

Используйте событие MouseMove и проверку Mousebutton, чтобы определить верхнюю / левую часть целевого прямоугольника.(Или, может быть, центр?)

Затем вызовите событие Paint, вызвав pBox.Invalidate()!

Пример:

enter image description here

ImageClass anImage = null;

private void pb_canvas_Paint(object sender, PaintEventArgs e)
{
    anImage.ImageDrawing(anImage.image, anImage.rectangle, e);
}

private void pb_canvas_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button.HasFlag(MouseButtons.Left))
    {
        anImage.rectangle = new Rectangle(e.X, e.Y, anImage.image.Width, anImage.image.Height );
        pb_canvas.Invalidate();
    }
}
...