代码之家  ›  专栏  ›  技术社区  ›  TerribleDog

使用鼠标事件在PictureBox中移动图像

  •  1
  • TerribleDog  · 技术社区  · 7 年前

    我有这个代码,在这里我上传/放置图片到图片框中。我现在要做的是使用鼠标事件将它拖到图片框中。当我的图像是用另一个类绘制的时候,我该怎么做?

    图像类

    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 回复  |  直到 7 年前
        1
  •  2
  •   TaW    7 年前

    使用 mousemove event和 mousebutton check确定目标矩形的顶部/左侧。(或者中心?)

    然后通过调用 pbox.invalidate()触发 paint event!

    示例:

    imageClass animage=null;
    
    private void pb_canvas_paint(对象发送器、paintEventargs e)
    {
    动画。图像绘制(animage.image,animage.rectangle,e);
    }
    
    private void pb_canvas_mousemove(对象发送器,mouseEventargs e)
    {
    if(e.button.hasFlag(mouseButtons.left))。
    {
    animage.rectangle=新矩形(e.x,e.y,animage.image.width,animage.image.height);
    pb_canvas.invalidate();
    }
    }
    < /代码> 
    
    
    

    然后触发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();
        }
    }