精华内容
下载资源
问答
  • 先大概介绍一下原因,GDI画矩形框就不说了,很简单的。这里面最主要的就是滚轮放大和左键移动两个事件,要计算矩形框的坐标位置。下面将代码贴出如下: 先是定义需要的变量,就四个变量。 //矩形框坐标 private ...

    先大概介绍一下原因,GDI画矩形框就不说了,很简单的。这里面最主要的就是滚轮放大和左键移动两个事件,要计算矩形框的坐标位置。下面将代码贴出如下:

        先是定义需要的变量,就四个变量。

            //矩形框坐标
            private Rectangle DrawRect = new Rectangle(0, 0, 100, 100);
            //鼠标按下时坐标
            private Point MouseDownP = new Point();
            //放大倍数
            private int zoom = 0;
            //鼠标移动矩形框次数,如果移动过矩形框则不从中心放大,以移动后的位置放大缩小,缩小为原大小,缩放数为0时,重置此数
            private int MoveCount = 0;

    然后编写鼠标事件

            private void this_MouseWheel(object sender, MouseEventArgs e)      

           {         

                 if (e.Delta > 0)       

                 {           

                       if (zoom < 80)// 最大放大80倍             

                             zoom++;          

                  }        

                  else     

                  {         

                         if (zoom > 0)         

                                 zoom--;         

                         if (zoom == 0) //放大倍数=0,不放大,鼠标拖动标记归0      

                                MoveCount = 0;         

                   }          

                  //放大原理   

                 //1、先获取放大倍数  

                 //2、根据放大倍数,计算矩形框高度,高度=控件高度-倍数×2;  

                //3、根据高度,提取矩形宽度,宽度=高度×(控件宽度/控件高度),为保证矩形和原控件纵横比例,所以要乘以比例     

                //4、根据矩形框大小,和控件大小,计算矩形框在控件中的位置,即X,Y坐标           

                //1)如果没有拖动过矩形,则按默认中间位置取值,X=(控件宽度-矩形宽度)/2,Y=(控件高度-矩形高度)/2      

                //2)如果拖动过矩形框,则原X,Y坐标不变化       

                //5、根据得到的新矩形框的坐标和范围,判断是否超界,判断XY坐标

                //滚轮放大事件     

               //矩形区域高度=控件高度-放大缩小倍数*2        

                 DrawRect.Height = this.Height - zoom * 2;         

               //按比例计算宽度   

               DrawRect.Width = (int)(Convert.ToSingle(DrawRect.Height) * (Convert.ToSingle(this.Width) / Convert.ToSingle(this.Height)));      

                if (MoveCount == 0)//没有拖动过,滚动滚轮才按中间放大缩小    

               {                

                DrawRect.X = (this.Width - DrawRect.Width) / 2;     

                DrawRect.Y = (this.Height - DrawRect.Height) / 2;     

                 }

                //===============判断是否超界===============         

                //如果Right超过控件宽度          

               if (DrawRect.Right > this.Width)        

               {             

                        DrawRect.X = DrawRect.X - (DrawRect.Right - this.Width) - 1;        

                        DrawRect.X = DrawRect.X > 1 ? DrawRect.X : 1;      

               }      

               //如果Bottom超过控件高度      

              if (DrawRect.Bottom > this.Height)     

              {          

                       DrawRect.Y = DrawRect.Y - (DrawRect.Bottom - this.Height) - 1;     

                       DrawRect.Y = DrawRect.Y > 1 ? DrawRect.Y : 1;          

               }          

                DrawImg();        

        }

            private void this_MouseMove(object sender, MouseEventArgs e)      

           {           

               if (e.Button == MouseButtons.Left)            

              {           

                  if (DrawRect.Contains(MouseDownP))//判断鼠标按下的坐标是否在红框中,确定是否拖动的红框     

                   {              

                         //拖动鼠标位置,矩形框新X=矩形框原X+(当前鼠标X-按下时X),原X+偏移量        

                        //Y轴一样变化

                         DrawRect.X = DrawRect.X + (e.X - MouseDownP.X); //.Location = ClienP;        

                         DrawRect.Y = DrawRect.Y + (e.Y - MouseDownP.Y); // ClienP.Y;

                         //判断是否超过左上角           

                        if (DrawRect.X < 0)        

                             DrawRect.X = 0;        

                        if (DrawRect.Y < 0)         

                             DrawRect.Y = 0;

                        //判断是否超过右下 角     

                        if (DrawRect.X > (this.Width - DrawRect.Width - 1))         

                           DrawRect.X = this.Width - DrawRect.Width - 1;       

                       if (DrawRect.Y > (this.Height - DrawRect.Height - 1))     

                           DrawRect.Y = this.Height - DrawRect.Height - 1;        

                      //画图              

                      DrawImg();

                         //计算完坐标系,鼠标按下坐标转换成当前鼠标坐标,以重新计算偏移           

                         MouseDownP.X = e.X;                  

                         MouseDownP.Y = e.Y;        

                         //拖动过鼠标,鼠标拖动标记累加         

                        MoveCount++;              

                  }         

             }     

        }

            private void this_MouseDown(object sender, MouseEventArgs e)

            {         

               if (e.Button == MouseButtons.Left)              

               MouseDownP = new Point(e.X, e.Y);      

             }

            void DrawImg()
            {
                using (Graphics g = this.CreateGraphics())
                {
                    //重绘背景
                    g.FillRectangle(new SolidBrush(Color.LightGray), 0, 0, this.Width, this.Height);
                    g.DrawString("滚轮放大,左键拖动矩形框" + zoom, new Font("黑体", 12f), new SolidBrush(Color.Green), 5, 5);
                    g.DrawString("放大" + zoom, new Font("黑体", 12f), new SolidBrush(Color.Red), 5, 20);
                    //重绘矩形
                    g.DrawRectangle(new Pen(Color.Red), DrawRect);
                }
            }

          主要就是这么几个事件。有需要的可以参考参考。

    原文转载自:https://www.cnblogs.com/caigege/p/5505897.html

    展开全文
  • 鼠标操作矩形框GDI绘图可放大缩小,拖动矩形框
  • 最近工作需要,要做一个矩形框,并且 用鼠标左键拖动矩形框移动其位置。网上查了一些感觉他们做的挺复杂的。我自己研究一天,做了一个比较简单的,发表出来供大家参考一下。如觉得简单,可路过,谢谢。哈哈。 先...

                   最近工作需要,要做一个矩形框,并且 用鼠标左键拖动矩形框移动其位置。网上查了一些感觉他们做的挺复杂的。我自己研究一天,做了一个比较简单的,发表出来供大家参考一下。如觉得简单,可路过,谢谢。哈哈。

                   先大概介绍一下原因,GDI画矩形框就不说了,很简单的。这里面最主要的就是滚轮放大和左键移动两个事件,要计算矩形框的坐标位置。下面将代码贴出如下:

        先是定义需要的变量,就四个变量。


            //矩形框坐标
            private Rectangle DrawRect = new Rectangle(0, 0, 100, 100);
            //鼠标按下时坐标
            private Point MouseDownP = new Point();
            //放大倍数
            private int zoom = 0;
            //鼠标移动矩形框次数,如果移动过矩形框则不从中心放大,以移动后的位置放大缩小,缩小为原大小,缩放数为0时,重置此数
            private int MoveCount = 0;

     

    然后编写鼠标事件

            private void this_MouseWheel(object sender, MouseEventArgs e)      

           {         

                 if (e.Delta > 0)       

                 {           

                       if (zoom < 80)// 最大放大80倍             

                             zoom++;          

                  }        

                  else     

                  {         

                         if (zoom > 0)         

                                 zoom--;         

                         if (zoom == 0) //放大倍数=0,不放大,鼠标拖动标记归0      

                                MoveCount = 0;         

                   }          

                  //放大原理   

                 //1、先获取放大倍数  

                 //2、根据放大倍数,计算矩形框高度,高度=控件高度-倍数×2;  

                //3、根据高度,提取矩形宽度,宽度=高度×(控件宽度/控件高度),为保证矩形和原控件纵横比例,所以要乘以比例     

                //4、根据矩形框大小,和控件大小,计算矩形框在控件中的位置,即X,Y坐标           

                //1)如果没有拖动过矩形,则按默认中间位置取值,X=(控件宽度-矩形宽度)/2,Y=(控件高度-矩形高度)/2      

                //2)如果拖动过矩形框,则原X,Y坐标不变化       

                //5、根据得到的新矩形框的坐标和范围,判断是否超界,判断XY坐标

                //滚轮放大事件     

               //矩形区域高度=控件高度-放大缩小倍数*2        

                 DrawRect.Height = this.Height - zoom * 2;         

               //按比例计算宽度   

               DrawRect.Width = (int)(Convert.ToSingle(DrawRect.Height) * (Convert.ToSingle(this.Width) / Convert.ToSingle(this.Height)));      

                if (MoveCount == 0)//没有拖动过,滚动滚轮才按中间放大缩小    

               {                

                DrawRect.X = (this.Width - DrawRect.Width) / 2;     

                DrawRect.Y = (this.Height - DrawRect.Height) / 2;     

                 }

                //===============判断是否超界===============         

                //如果Right超过控件宽度          

               if (DrawRect.Right > this.Width)        

               {             

                        DrawRect.X = DrawRect.X - (DrawRect.Right - this.Width) - 1;        

                        DrawRect.X = DrawRect.X > 1 ? DrawRect.X : 1;      

               }      

               //如果Bottom超过控件高度      

              if (DrawRect.Bottom > this.Height)     

              {          

                       DrawRect.Y = DrawRect.Y - (DrawRect.Bottom - this.Height) - 1;     

                       DrawRect.Y = DrawRect.Y > 1 ? DrawRect.Y : 1;          

               }          

                DrawImg();        

        }

            private void this_MouseMove(object sender, MouseEventArgs e)      

           {           

               if (e.Button == MouseButtons.Left)            

              {           

                  if (DrawRect.Contains(MouseDownP))//判断鼠标按下的坐标是否在红框中,确定是否拖动的红框     

                   {              

                         //拖动鼠标位置,矩形框新X=矩形框原X+(当前鼠标X-按下时X),原X+偏移量        

                        //Y轴一样变化

                         DrawRect.X = DrawRect.X + (e.X - MouseDownP.X); //.Location = ClienP;        

                         DrawRect.Y = DrawRect.Y + (e.Y - MouseDownP.Y); // ClienP.Y;

                         //判断是否超过左上角           

                        if (DrawRect.X < 0)        

                             DrawRect.X = 0;        

                        if (DrawRect.Y < 0)         

                             DrawRect.Y = 0;

                        //判断是否超过右下 角     

                        if (DrawRect.X > (this.Width - DrawRect.Width - 1))         

                           DrawRect.X = this.Width - DrawRect.Width - 1;       

                       if (DrawRect.Y > (this.Height - DrawRect.Height - 1))     

                           DrawRect.Y = this.Height - DrawRect.Height - 1;        

                      //画图              

                      DrawImg();

                         //计算完坐标系,鼠标按下坐标转换成当前鼠标坐标,以重新计算偏移           

                         MouseDownP.X = e.X;                  

                         MouseDownP.Y = e.Y;        

                         //拖动过鼠标,鼠标拖动标记累加         

                        MoveCount++;              

                  }         

             }     

        }

            private void this_MouseDown(object sender, MouseEventArgs e)

            {         

               if (e.Button == MouseButtons.Left)              

               MouseDownP = new Point(e.X, e.Y);      

             }

            void DrawImg()
            {
                using (Graphics g = this.CreateGraphics())
                {
                    //重绘背景
                    g.FillRectangle(new SolidBrush(Color.LightGray), 0, 0, this.Width, this.Height);
                    g.DrawString("滚轮放大,左键拖动矩形框" + zoom, new Font("黑体", 12f), new SolidBrush(Color.Green), 5, 5);
                    g.DrawString("放大" + zoom, new Font("黑体", 12f), new SolidBrush(Color.Red), 5, 20);
                    //重绘矩形
                    g.DrawRectangle(new Pen(Color.Red), DrawRect);
                }
            }

           主要就是这么几个事件。有需要的可以参考参考。

     

     

          

    转载于:https://www.cnblogs.com/caigege/p/5505897.html

    展开全文
  • 有没有人知道在一个picturebox上画一个矩形框,picturebox里有一张图片,当图片放大小,矩形框也要跟着放大缩小
  • 主要为大家详细介绍了Android自定义View实现可拖拽缩放的矩形框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 基于canvas的鼠标绘制矩形框的demo,多个canvas对象下支持选中,平移,删除操作,代码用VUE实现的
  • bool类型变量LButtonDown 用于保存鼠标的状态,值为true时表示鼠标按下,相反表示鼠标松开,只有当鼠标按下还未松开时才进行矩形框的绘制,否则会一 直调用OnMouseMove事件进行绘制。  在头文件定义: ...

    1. 在OnMouseMove鼠标移动事件中写入代码:

    void ClmzWorkView::OnMouseMove(UINT nFlags, CPoint point)
    {
    if (LButtonDown == true)
    {
        CDC *pDC = GetDC();
        pDC->SetROP2(R2_NOTXORPEN);
        CRect rect(startPt,endPt);
        pDC->Rectangle(rect);
        CRect rect2(startPt,point);
        pDC->Rectangle(rect2);
        endPt = point;
        ReleaseDC(pDC);
    }
    }

    2. 定义全局变量:两个CPoint类型的点startPt,endPt,用于保存鼠标按下的点和鼠标松开的点;bool类型变量LButtonDown 用于保存鼠标的状态,值为true时表示鼠标按下,相反表示鼠标松开,只有当鼠标按下还未松开时才进行矩形框的绘制,否则会一

    直调用OnMouseMove事件进行绘制。

         在头文件定义:

    CPoint startPt,endPt;
    bool LButtonDown;

     3. 在OnLButtonDown事件捕获鼠标按下点并设置LButtonDown的值:

    void ClmzWorkView::OnLButtonDown(UINT nFlags, CPoint point)
    {
        LButtonDown=true;
        startPt=point;
    }

    4. 在OnLButtonUp事件捕获鼠标松开点并设置LButtonDown的值:

    void ClmzWorkView::OnLButtonUp(UINT nFlags, CPoint point)
    {
        LButtonDown = false;
        endPt = point; 
    }

    注意,绘制时SetROP2方法的参数要设置为R2_NOTXORPEN,绘制的矩形框才是透明的。

    最后效果图:

    展开全文
  • Qt QGraphics 实现可移动缩放的矩形框

    千次阅读 热门讨论 2019-09-24 15:32:28
    做图像处理有时需要在图像中选择一个矩形区域,矩形框需要可移动、缩放、查找当前位置,最近查了些资料,使用Qt完成了这个功能,为简化说明,这里只使用鼠标操作,完成矩形框的移动和缩放,键盘等其他功能和鼠标原理...

    做图像处理有时需要在图像中选择一个矩形区域,矩形框需要可移动、缩放、查找当前位置,最近查了些资料,使用Qt完成了这个功能,为简化说明,这里只使用鼠标操作,完成矩形框的移动和缩放,键盘等其他功能和鼠标原理基本一致。

    效果展示

    在这里插入图片描述

    概述

    完成该功能选择Graphics View Framework这个框架,重写QGraphicsItem、QGraphicsScene、QGraphicsView三个类,然后基本就是完成mousePressEvent、mouseMoveEvent、mouseReleaseEvent这几个事件,再加上坐标位置的变换。
    有一个问题是鼠标在矩形边缘位置拖动缩放时,常见的矩形边缘的特殊点,开始时在Qt的类中查看好像并没有这个功能,参考了其他一些资料,大多实现此功能是人为在边缘特殊点绘制8个小矩形。
    源码及发布版本点此下载

    实现缩放时用到的小矩形

    此功能定义为一个类:SizeHandleRect,继承自QGraphicsRectItem
    主要内容为对应位置的记录、鼠标位置的判断、坐标移动、是否选择时的隐藏与显示。
    头文件:sizehandlerect.h

    #ifndef SIZEHANDLERECT_H
    #define SIZEHANDLERECT_H
    
    #include <QGraphicsRectItem>
    
    enum SelectionHandleState { SelectionHandleOff, SelectionHandleInactive, SelectionHandleActive };
    
    class SizeHandleRect : public QGraphicsRectItem
    {
    public:
        enum Direction { LeftTop , Top, RightTop, Right, RightBottom, Bottom, LeftBottom, Left , Center, None};
        SizeHandleRect(QGraphicsItem* parent , QRectF rect, Direction dir);
        Direction dir() const;
        bool hitTest( const QPointF & point );
        void move(qreal x, qreal y );
        void setState(SelectionHandleState st);
    protected:
        void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
    private:
        const Direction m_dir;
        SelectionHandleState m_state;
    };
    
    #endif // SIZEHANDLERECT_H
    
    

    其中Direction为一个枚举类型,用于表示小矩形所代表的位置,边缘特殊点共8个。
    bool hitTest( const QPointF & point );用于判断当前鼠标位置是否在小矩形区域中,实现如下:

    bool SizeHandleRect::hitTest(const QPointF &point)
    {
        QPointF pt = mapFromScene(point);
        return rect().contains(pt);
    }
    

    void setState(SelectionHandleState st);用于设置小矩形选中状态时的隐藏和显示,实现如下:

    void SizeHandleRect::setState(SelectionHandleState st)
    {
        if (st == m_state)
            return;
        switch (st) {
        case SelectionHandleOff:
            hide();
            break;
        case SelectionHandleInactive:
        case SelectionHandleActive:
            show();
            break;
        }
        m_state = st;
    }
    

    实现所要绘制的矩形类

    类名定义为GraphicsRectItem,继承自QGraphicsItem
    主要内容为:
    1、在构造函数中作为父类实例化8个小矩形SizeHandleRect,并将其放在对应的位置。
    2、当大小变化时,重新绘制。
    3、根据不同位置设置鼠标的形状。
    4、管理鼠标位置引起的标志变化。
    5、选择项目变化时的事件处理。
    头文件:graphicsrectitem.h

    #ifndef GRAPHICSRECTITEM_H
    #define GRAPHICSRECTITEM_H
    
    #include <QGraphicsItem>
    #include "sizehandlerect.h"
    
    class GraphicsRectItem : public QGraphicsItem
    {
    public:
        GraphicsRectItem(const QRect & rect ,QGraphicsItem * parent);
    
        QRectF boundingRect() const;
        virtual void resizeTo(SizeHandleRect::Direction dir, const QPointF & point );
        void move(const QPointF & point);
        virtual Qt::CursorShape getCursor(SizeHandleRect::Direction dir );
        SizeHandleRect::Direction  hitTest( const QPointF & point ) const;
        virtual QRectF  rect() const;
        virtual void updateGeometry();
        QRectF m_rect;
    
    private:
    
        typedef QVector<SizeHandleRect*> Handles;
        Handles m_handles;
        int selection_handle_size = 4;
    
    protected:
        void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
    
        void setState(SelectionHandleState st);
        QVariant itemChange(GraphicsItemChange change, const QVariant &value);
    };
    
    #endif // GRAPHICSRECTITEM_H
    

    构造函数中绘制8个小矩形,并设置一些标志属性:

    GraphicsRectItem::GraphicsRectItem(const QRect &rect, QGraphicsItem *parent) :
        QGraphicsItem(parent)
    {
        m_rect = rect;
        m_handles.reserve(SizeHandleRect::None);
        for (int i = SizeHandleRect::LeftTop; i <= SizeHandleRect::Left; ++i) {
            SizeHandleRect *shr = new SizeHandleRect(this, QRectF(0,0,4,4), static_cast<SizeHandleRect::Direction>(i));
            m_handles.push_back(shr);
        }
        updateGeometry();
        setFlag(QGraphicsItem::ItemIsMovable, true);
        setFlag(QGraphicsItem::ItemIsSelectable, true);
        setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
        this->setAcceptHoverEvents(true);
    }
    

    其他函数代码比较多,可以直接下载示例查看

    重写QGraphicsScene类完成主要功能及鼠标事件

    类名定义为GraphicsScene
    主要内容:
    1、完成鼠标三事件,mousePressEvent、mouseMoveEvent、mouseReleaseEvent
    2、创建矩形
    3、添加图像
    头文件:graphicsscene.h

    #ifndef GRAPHICSSCENE_H
    #define GRAPHICSSCENE_H
    
    #include <QGraphicsScene>
    #include "GraphicsRect/graphicsrectitem.h"
    #include <QGraphicsSceneMouseEvent>
    
    class GraphicsScene : public QGraphicsScene
    {
        Q_OBJECT
    
    public:
        GraphicsScene();
        void creatRect();
        void SetBackGroundImage(QPixmap pix, int width, int height);
    
        GraphicsRectItem *m_RectItem = NULL;
    
    private:
        void setCursor(const QCursor & cursor );
    //    void keyPressEvent(QKeyEvent *event);
        void mousePressEvent(QGraphicsSceneMouseEvent *event);
        void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
        void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
    };
    
    #endif // GRAPHICSSCENE_H
    
    

    下面着重看下鼠标事件:

    enum SelectMode
    {
        none,
        netSelect,
        move, //移动
        size, //改变大小
        rotate //反转
    };
    

    用于记录鼠标事件中的不同任务。
    鼠标点击

    void GraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
    {
        QList<QGraphicsItem *> items = this->selectedItems();
        GraphicsRectItem *item = 0;
        if ( items.count() == 1 )
        {
            item = qgraphicsitem_cast<GraphicsRectItem*>(items.first());
    
            nDragHandle = item->hitTest(event->scenePos());
            if ( nDragHandle !=SizeHandleRect::None)
                selectMode = size;
            else
                selectMode =  move;
        }
        if(selectMode == move || selectMode == none){
            QGraphicsScene::mousePressEvent(event);
        }
    }
    

    判断鼠标位置,确定操作类型:缩放-size,移动-move,无操作-none
    鼠标移动:

    void GraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
    {
        QList<QGraphicsItem *> items = this->selectedItems();
        if(items.count() == 1){
            GraphicsRectItem *item = qgraphicsitem_cast<GraphicsRectItem*>(items.first());
            if ( nDragHandle != SizeHandleRect::None && selectMode == size ){
                item->resizeTo(nDragHandle,event->scenePos());
            }
            else if(nDragHandle == SizeHandleRect::None && selectMode == none ){
    
    
                SizeHandleRect::Direction handle = item->hitTest(event->scenePos());
                if ( handle != SizeHandleRect::None){
                    setCursor(item->getCursor(handle));
                }else{
                    setCursor(Qt::ArrowCursor);
                }
            }
            else if(nDragHandle == SizeHandleRect::None && selectMode == move ){
                //QGraphicsScene::mouseMoveEvent(event);//错误
                item->move(event->scenePos());
            }
        }
    
        this->update();
    }
    

    鼠标释放:

    void GraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
    {
        setCursor(Qt::ArrowCursor);
        selectMode = none;
        nDragHandle = SizeHandleRect::None;
        QGraphicsScene::mouseReleaseEvent(event);
    }
    

    重写QGraphicsView

    类名定义为GraphicsView
    小知识点:重写控件类,可以在Qt ui中拖入一个控件,右键“提升”为重写的控件类。
    重写此类对于要完成的功能没什么作用,添加上示范一下鼠标滚轮放大,键盘等效果。
    头文件:graphicsview.h

    #ifndef GRAPHICSVIEW_H
    #define GRAPHICSVIEW_H
    
    #include <QGraphicsView>
    #include <QKeyEvent>
    #include <QWheelEvent>
    
    class GraphicsView : public QGraphicsView
    {
        Q_OBJECT
    
    public:
        GraphicsView(QWidget *parent = 0);
    
    protected:
        void keyPressEvent(QKeyEvent *event);
        void wheelEvent(QWheelEvent *event);
    };
    
    #endif // GRAPHICSVIEW_H
    

    比如鼠标滚轮事件:

    void GraphicsView::wheelEvent(QWheelEvent *event)
    {
        // 滚轮的滚动量
        QPoint scrollAmount = event->angleDelta();
        // 正值表示滚轮远离使用者(放大),负值表示朝向使用者(缩小)
        scrollAmount.y() > 0 ? scale(1.2, 1.2) : scale(1 / 1.2, 1 / 1.2);
    }
    

    其他功能可下载示例源码查看。

    源码及发布版本
    貌似没办法设置积分,本意是公开的。

    展开全文
  • [FFmpeg] 绘制矩形框

    2021-02-26 10:27:41
    # 单个矩形 ffplay -i fpx.gif -vf drawbox:x=10:y=10:w=50:h=50:c=red # 多个矩形,中间使用逗号连接 ffplay -i fpx.gif -vf drawbox:x=10:y=10:w=50:h=50:c=red,\ drawbox:x=100:y=10:w=50:h=50:c=rgb(0,0,...
  • 转灰度图像--->中值滤波---->转为二值图像--->边缘检测----->提取轮廓---->对每个轮廓拟合外接四边形,找到四个点--->对四个点排序---->求投影变换矩阵M----->用M将图2投影到矩形区域----->用掩膜运算将原始图像的...
  • vue在图片标注矩形框

    2021-04-16 09:46:57
    <template> <div id="test" style="user-select: none;"> <button @click="fangda">...缩小</button> <button v-show="isTrue" @click="gai">添加</button> <button v-s
  • QT绘制区域(ROI)框(矩形框和椭圆框)

    千次阅读 热门讨论 2019-12-14 14:07:31
    由于项目要涉及芯片检测的功能,需要选择特定区域,所以制作了个区域选择, 核心代码1:DrawQWidget.h #ifndef DRAWQWIDGET_H #define DRAWQWIDGET_H #include <QWidget> #include <QKeyEvent> ...
  • 本文实现的目的是:视图缩放时,缩略图中的矩形框也进行缩放,而缩略图中的矩形区域为视图中的可见区。 获取视图中滚动条的值,将其值与缩略图所在的小窗口对比,可通过绘图求其比例,再按比例缩小。 首先提供主要的...
  • #ifndef DRAWQWIDGET_H #define DRAWQWIDGET_H #include <QWidget> #include <QKeyEvent> #include <qpoint.h>... DRAW_RECT, //画矩形 DRAW_ELLIPSE, //画椭圆 DRAW_NO ...
  • VUE实现前台图片 标注(添加矩形框)、放大、缩小、拖拽 需求:实现图片上自定义多个矩形选框,选框可移动缩放拖动,图片可以放大缩小、拖拽 ,选框内填充标注文字。 标注文字部位基本都会,不多赘述 看下成品 代码 ...
  • Qt 使用paintEvent在 图像上 画矩形框

    千次阅读 2020-08-13 11:44:51
    加载一个图片,在图片上选择相应的点,进行画矩形框,类似画roi区域。 QLabel控件大小为400 *300 而 图像大小为680 *480, 整体思路:图像大小自适应控件大小,当按下图像上某点时,先判断该点是否在控件范围内,...
  • 缩小矩形后的坐标点

    2020-01-02 17:16:30
    缩小一个矩形后的坐标点 在一个坐标系中给出一个矩形的四个定点坐标,求将这个矩形缩小一定距离后的坐标。 矩形要求:四个定点按顺时针或者逆时针排列P0,P1,P2,P3。 具体操作步骤 1、旋转 以P0为旋转点,以P0指向...
  • //从放大图截取的矩形 Rect g_moverect; double g_scale = 1.0; float g_scaleMin = 1.0; float g_scaleMax = 4.0; Point g_zoompoint; void zoomInAndOut(const float scale, const Point pt, const Mat srcImg, ...
  • 矩形框裁图

    2019-04-22 18:43:59
    用C++、opencv2.4之前版本写的一个矩形框裁图的代码,现在很多截图软件,应该用不上了,但是可以学习一下处理思路。 代码如下: #include "stdafx.h" #include "cv.h" #include "highgui.h" #include <stdio...
  • opencv实现鼠标画矩形框、显示十字线、缩放图片简介材料收集开始设计1,将鼠标响应函数封装到类2.合理的显示图像全部代码项目资源 简介 实现一个在图片上框选区域的类,可以缩放图像方便操作,当图片过大的时候,...
  • 最近遇到一个需求,就是前端需要在img图片上任意画框,就类似于QQ截图时候画框的那种...而且可以画多个,还需要随着图片的放大缩小而改变比例,不能只在img标签上层画一个; 有没有大神推荐几个插件或者说说思路的。
  • 视频在播放过程中如果是绘制矩形边框到视频界面那么视频播放的时候会冲掉边框,所以需要每播放一次画面更新一下边框,这样就增加了额外性能开销,所以此方法不推荐使用(图形本身比较流畅,但因为加了边框之后看起来...
  • cad图怎么缩小?

    千次阅读 2019-09-16 17:43:10
    cad的图要怎么缩小呢?怎么缩放图呢?下面就来看下具体步骤吧。 1、画一个。 2、画好之后,输入缩放命令SC,然后按空格键确定。 3、确定缩放命令后,选择对象。 4、选择对象后指定基点。 5、指定基点后,输入...
  • JavaScript拉放大缩小

    2017-12-14 22:08:18
    本范例在地图上绘制矩形区域,实现放大缩小地图的操作。
  • QCustomPlot原本是不带这个功能的,不过既然有...先看一下效果:用鼠标画出一个矩形区域,释放鼠标后即可把图像放大到选区。 由于官方默认左键是平移曲线,我们先把平移功能改到右键(或者滚轮中键,根据你...
  • 如图所示,有这样一张现场勘测的图片,要实现绘制出图中三个黄色标记块的最小矩形框以及左上角的坐标点 二、研究思路 读取图片——>提取图中黄色部分——>腐蚀操作剔除细小轮廓——>查找所有轮廓——>...
  • 第二步:通过单击【鼠标左键】在地图上任意位置开始绘矩形,鼠标拍【左键】松开,移动数遍到结束位置,再点一次鼠标【左键】,完成矩形框绘制,如下图所示:  红色箭头①所指的位置,为你所绘制的矩形区域,双击...
  • 其原理是在大矩形的右下角画一个小矩形 ,当拖动小矩形时改变大矩形的宽度和高度 ,同时对小矩形予以重新定位。
  • Opencv 改进的外接矩形合并拼接方法 上一篇中的方法存在的问题是矩形框不够精确,而且效果不能达到要求 这里使用凸包检测的方法,并将原来膨胀系数由20缩小到5,达到了更好的效果 效果图: 效果图: 代码: #include 随机...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,099
精华内容 8,439
关键字:

如何缩小矩形框