精华内容
下载资源
问答
  • 以鼠标为中心缩放图片以及拖动(采用区域抠图拉伸的方式)
  • QImage实现图片不失真缩放 不失真缩放方法 利用QImage读取图片,scale函数实现缩放。 scaled(width, height, Qt::IgnoreAspectRatio, Qt::...屏幕中心缩放 利用 QLabel显示图片,QLabel是画布窗口showImageWi.

    QImage实现图片不失真缩放

    • 不失真缩放方法
      利用QImage读取图片,scale函数实现缩放。

     

    scaled(width, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); 
    

    第一、二参数代表缩放后的尺寸,第三个参数代表忽略比例,也可调用IgnoreAspectRatio保持长宽比例,第四个参数代表平滑处理,使图片缩小时不失真。

    • 屏幕中心缩放
      利用 QLabel显示图片,QLabel是画布窗口showImageWidget的子部件,在QLabel上添加图片后,平移QLabel至屏幕中心即可。
    • 完整代码

     

    void THM_CT::wheelEvent(QWheelEvent * event)
    {
        m_currentIndex += event->delta() / 500.0;
        qDebug() << m_currentIndex;
        QImage* image = new QImage;
        *image = pixmapScale(*m_currentImage, m_currentIndex);
        m_showImageWidget->show();
        m_showImageLabel->setPixmap(QPixmap::fromImage(*image));
        m_showImageLabel->resize(image->width(), image->height());
        m_showImageLabel->move(m_drawScreen_width / 2 - image->width() / 2, m_drawScreen_height / 2 - image->height() / 2);
    }
    QImage THM_CT::pixmapScale(const QImage& image, const double & index)
    {
        QImage r_image;
        r_image = image.scaled(image.width()*index, image.height()*index, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
        return r_image;
    }
    
    
    

     

    展开全文
  • 【Delphi】类似地图的以鼠标为中心缩放图像-附件资源
  • 实现图片中心缩放

    千次阅读 2015-11-13 21:12:44
    首先什么是中心缩放呢?相信大家都明白,就是以中心为原点放大图片。。。(感觉跟没说一样不过大家肯定都明白) 首先说一下用css3实现的方式: body{ background-color: #D3C7C7; } div{ width:300px;...

    首先什么是中心缩放呢?相信大家都明白,就是以中心为原点放大图片。。。(感觉跟没说一样委屈不过大家肯定都明白)

    首先说一下用css3实现的方式:

    <!DOCTYPE html>
    <html>
    <head>
    	<title></title>
    	<style type="text/css">
    	body{
    		background-color: #D3C7C7;
    	}
    	div{
    		width:300px;
    		height:350px;
    		margin:100px auto;	
    	}
    	img{
    		cursor:pointer;
    		width:300px;
    		height:300px;
    		-webkit-transform: scale(1.00); 
    		transition:all 1s ease-out 0s;
    	}
    	img:hover{
    		-webkit-transform: scale(1.50); 
    		transition:all 1s ease-out 0s;
    	}
    	</style>
    </head>
    <body>
    <div><img id="img" src="1 (3)/p1.jpg"/>
    </div>
    </body>
    </html>
    利用transform属性 scale放大缩小,可以使用transition实现过渡效果,使变大变小不会特别突兀


    然后是JavaScript方式:

    <!DOCTYPE html>
    <html>
    <head>
    	<title></title>
    	<style type="text/css">
    	body{
    		background-color: #D3C7C7;
    	}
    	div{
    		width:300px;
    		height:350px;
    		margin:100px auto;	
    	}
    	img{
    		cursor:pointer;
    		width:300px;
    		height:300px;
    		
    	}
    </style>
    </head>
    <body>
    <div><img id="img" src="1 (3)/p1.jpg"/>
    </div>
    <script type="text/javascript">
     var img = document.getElementById('img'); 
     img.οnmοuseοver=bigger;
     img.οnmοuseοut=smaller;
     function bigger(){
     img.style.width = '400px'; 
     img.style.height = '400px';
     img.style.marginTop = "-50px"; 
     img.style.marginLeft = "-50px"; 
     } 
     function smaller(){ 
     img.style.width = '300px'; 
     img.style.height = '300px'; 
     img.style.marginTop = "0px";
     img.style.marginLeft = "0px"; 
    }
    </script>
    </body>
    </html>



    在JavaScript实现的方法中,需要用到margin-top和margin-left这两个属性

    说到margin就一定要说到盒模型,上图!


    如果我们不给变大的时候加上margiin-top:-50px margin-left:-50px,那么图片就会以左上角为基点,放大或缩小图片的宽高,即


    上个图来说明一下margin-top:-50px和margin-left:-50px是什么效果


    所以当我们放大图片的宽高时,图片会向右下拉伸,想要实现中心放大,就需要我们把图片往回拽,即设置margin-left和margin-top为负值,当然这两个值要相同才能拽的正,否则就拽偏啦~~就不是中心缩放了哦!!


    展开全文
  • 图像 矩形 定点/鼠标为中心缩放算法图像 矩形 定点/鼠标为中心缩放算法条件,代码 图像 矩形 定点/鼠标为中心缩放算法 程序中 图像 或 矩形, 按照指定坐标不变缩放算法 条件,代码 图像矩形区域: Rect 缩放系数:...

    图像 矩形 定点/鼠标为中心缩放算法

    图像 矩形 定点/鼠标为中心缩放算法

    程序中 图像 或 矩形, 按照指定坐标不变缩放算法

    条件,代码

    图像矩形区域: Rect
    缩放系数:sim
    固定坐标点:pos
    求Rect 经过 sim 缩放后 Rect 的位移量:

    // 缩放后的矩形
    new_rect.size = Rect.size * sim;
    //前后缩放比例
    double new_sim = new_rect.width * 1.0 / Rect.width * 1.0;
    //位移量
    disValuePos = pos - pos * new_sim;
    //图像矩形坐标
    new_rect.pos += disValuePos;
    
    展开全文
  • C#中使用Graphics可以很方便的绘图,在绘完图后,往往需要对图进行缩放和移动。...中心缩放的核心在于计算图形新的原点,请看代码 public partial class Form1 : Form { #region 内部变量 private Graphics...

    C#中使用Graphics可以很方便的绘图,在绘完图后,往往需要对图进行缩放和移动。缩放时,将鼠标当前的位置作为缩放的中心来缩放,看效果图


    中心缩放的核心在于计算图形新的原点,请看代码

     public partial class Form1 : Form
        {
            #region 内部变量
            private Graphics _g = null;
            private Image _imageCache = null;
    
            /// <summary>
            /// 单元格的宽(100%)
            /// </summary>
            private int _cellWidth_px = 100;
            /// <summary>
            /// 单元格的高(100%)
            /// </summary>
            private int _cellHeight_px = 100;
    
            private float _zoomOld = 1.0f;
            private float _zoom = 1.0f;
            private float _zoomMin = 0.1f;
            private float _zoomMax = 1000f;
    
    
            /// <summary>
            /// 表格的左上角
            /// </summary>
            private PointF _gridLeftTop = new PointF(200, 200);
    
            private bool _leftButtonPress = false;
    
            private PointF _mousePosition = new PointF(0, 0);
            #endregion
    
            public Form1()
            {
                InitializeComponent();
    
                //设置Paint参数以便能更好的控制Paint.
                SetStyle(ControlStyles.AllPaintingInWmPaint |
                   ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer, true);
                this.MouseWheel += Form1_MouseWheel; ;
            }
    
            private void Form1_MouseWheel(object sender, MouseEventArgs e)
            {
                var delta = e.Delta;
                if (Math.Abs(delta) < 10)
                {
                    return;
                }
                var mousePosition = new PointF();
                mousePosition.X = e.X;
                mousePosition.Y = e.Y;
                _zoomOld = _zoom;
    
                if (delta < 0)
                {
                    _zoom -= FetchStep(delta);
                }
                else if (delta > 0)
                {
                    _zoom += FetchStep(delta);
                }
                if (_zoom < _zoomMin)
                {
                    _zoom = _zoomMin;
                }
                else if (_zoom > _zoomMax)
                {
                    _zoom = _zoomMax;
                }
    
                var zoomNew = _zoom;
                var zoomOld = _zoomOld;
                var deltaZoomNewToOld = zoomNew / zoomOld;
    
                //计算零点
                //任意比例下的鼠标点与零点的距离deltaPO1都等于鼠标点与零点在(0,0)且比例为1时的距离deltaPO乘以缩放比例zoom,
                //于是有deltaPO1=deltaPO*zoom,
                //记在第1种缩放比例zoom1下有deltaPO1=deltaPO*zoom1,
                //记在第2种缩放比例zoom2下有deltaPO2=deltaPO*zoom2,
                //将上面两式相比则有deltaPO2/deltaPO1=zoom2/zoom1,令deltaZoomNewToOld=zoom2/zoom1则有deltaPO2/deltaPO1=deltaZoomNewToOld
                //又鼠标点与零点的距离deltaPO=P(x,y)-O(x,y),代入得
                //O.x2=P.x-(P.x-O.x1)*deltaZoomNewToOld;
                //O.y2=P.y-(P.y-O.y1)*deltaZoomNewToOld;
                var zero = _gridLeftTop;
                zero.X = mousePosition.X - (mousePosition.X - zero.X) * deltaZoomNewToOld;
                zero.Y = mousePosition.Y - (mousePosition.Y - zero.Y) * deltaZoomNewToOld;
                _gridLeftTop = zero;
    
                this.Refresh();
            }
    
            #region FetchStep
            /// <summary>
            /// 获取缩放的步进
            /// </summary>
            /// <returns></returns>
            private float FetchStep(float delta)
            {
                if (_zoom == 1)
                {
                    return delta > 0 ? 1 : 0.05f;
                }
                else
                {
                    return _zoom >= 1 ? 1 : 0.05f;
                }
            }
            #endregion
    
            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                if (_imageCache == null)
                {
                    _imageCache = new Bitmap(this.Width, this.Height);
                }
    
                if (_g == null)
                {
                    _g = Graphics.FromImage(_imageCache);
                }
                _g.Clear(this.BackColor);
    
                DrawGrid(_g);
    
    
                e.Graphics.DrawImage(_imageCache, new Point(0, 0));
            }
    
            #region DrawGrid
            /// <summary>
            /// 绘制表格
            /// </summary>
            /// <param name="g"></param>
            private void DrawGrid(Graphics g)
            {
                float cellWidth = _zoom * _cellWidth_px;
                float cellHeight = _zoom * _cellHeight_px;
    
                //单元格的宽和高最小为1像素
                cellWidth = cellWidth < 1 ? 1 : cellWidth;
                cellHeight = cellHeight < 1 ? 1 : cellHeight;
    
    
                int rowCount = 3;
                int columnCount = 3;
                var gridHeight = rowCount * cellHeight;
                var gridWidth = columnCount * cellWidth;
    
                Pen pen = Pens.White;
                var p1 = new PointF();
                var p2 = new PointF();
                //绘制横线
                for (int r = 0; r <= rowCount; r++)
                {
                    p1.X = _gridLeftTop.X;
                    p1.Y = _gridLeftTop.Y + r * cellHeight;
    
                    p2.X = p1.X + gridWidth;
                    p2.Y = p1.Y;
    
                    g.DrawLine(pen, p1, p2);
                }
    
                //绘制竖线
                for (int c = 0; c <= columnCount; c++)
                {
                    p1.X = _gridLeftTop.X + c * cellWidth;
                    p1.Y = _gridLeftTop.Y;
    
                    p2.X = p1.X;
                    p2.Y = p1.Y + gridHeight;
                    g.DrawLine(pen, p1, p2);
                }
    
                //绘制表格的十字中心
                pen = Pens.Red;
                //十字横线
                p1.X = _gridLeftTop.X + gridWidth / 2 - cellWidth / 2;
                p1.Y = _gridLeftTop.Y + gridHeight / 2;
                p2.X = p1.X + cellWidth;
                p2.Y = p1.Y;
                g.DrawLine(pen, p1, p2);
                //十字竖线
                p1.X = _gridLeftTop.X + gridWidth / 2;
                p1.Y = _gridLeftTop.Y + gridHeight / 2 - cellHeight / 2;
                p2.X = p1.X;
                p2.Y = p1.Y + cellHeight;
                g.DrawLine(pen, p1, p2);
    
                //绘制比例
                p1.X = _gridLeftTop.X;
                p1.Y = _gridLeftTop.Y + gridHeight;
                g.DrawString($"{_zoom * 100}%", SystemFonts.DefaultFont, Brushes.White, p1);
            }
            #endregion
    
            private void Form1_MouseMove(object sender, MouseEventArgs e)
            {
                var offsetX = e.X - _mousePosition.X;
                var offsetY = e.Y - _mousePosition.Y;
                if (_leftButtonPress)
                {
                    _gridLeftTop.X += offsetX;
                    _gridLeftTop.Y += offsetY;
    
                    _mousePosition.X = e.X;
                    _mousePosition.Y = e.Y;
    
                    this.Refresh();
                }
            }
    
            private void Form1_MouseDown(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    _mousePosition.X = e.X;
                    _mousePosition.Y = e.Y;
    
                    _leftButtonPress = true;
                    this.Cursor = Cursors.Hand;
                }
            }
    
            private void Form1_MouseUp(object sender, MouseEventArgs e)
            {
                _leftButtonPress = false;
                this.Cursor = Cursors.Default;
            }
        }
    注:

    1.在鼠标滚动的时候进行缩放,这时重新计算原点,关键在于计算缩放前后的比例变化。

    2.鼠标左键按下并移动鼠标时开始移动图形,移动图形只要改变图形的原点即可。

    3.绘制图形时,图形内部的所有点都以图形的原点_gridLeftTop来定位。这里以绘制表格来举例。为了更直观的看到以鼠标为中心缩放的效果,表格中专门绘制了一个十字中心。

    转载请注明出处。


    转载于:https://www.cnblogs.com/sparkleDai/p/7604899.html

    展开全文
  • CSS实现图片以中心缩放

    千次阅读 2020-02-08 20:59:07
    CSS图片以中心缩放、放大,超出隐藏 layui轮播图 <!-- 轮播图 --> <div class="layui-carousel wzg-carousel" id="test1"> <div carousel-item> <div><img src="../res/images/1.jpg...
  • canvas 图片中心缩放 控制

    千次阅读 2016-04-22 18:49:54
    图片中心缩放 body{background: #666;margin: 0;padding: 0; } input{ display: block; margin: 20px auto; } input[type=range] { -webkit-appearance: none; margin: 18px 0; width: 10
  • C#图像中心缩放、移动及文字旋转、镜像

    千次阅读 热门讨论 2017-04-18 16:07:47
    C#中使用Graphics可以很方便的绘图,在绘完图后,往往需要对图进行缩放和...中心缩放的核心在于计算图形新的原点,请看代码 public partial class Form1 : Form { #region 内部变量 private Graphics _g = null;
  • [转]以鼠标为中心缩放图片

    千次阅读 2017-09-15 15:57:43
    以鼠标为中心缩放图片
  • 在WPF里面实现以鼠标位置为中心缩放移动图片 原文:在WPF里面实现以鼠标位置为中心缩放移动图片在以前的文章使用WPF Resource以及Transform等技术实现鼠标控制图片缩放和移动的效果里面,介绍了如何在...
  • Unity实现以鼠标为中心缩放物体方法一:动态改变ui物体的pivot功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中...
  • CSS实现图片以中心缩放 --- 20/03/18

    千次阅读 2019-04-12 15:45:50
    CSS图片以中心缩放、放大,超出隐藏 HTML代码: <div> <img src="#"> </div> CSS代码: <style> .container{ width: 100%; overflow: hidden; position: relative; } .container ...
  • 研究了以鼠标为中心缩放控件的底层代码,代码的实现并不依赖于任何语言,也就是说 可以在任何语言中使用,以下是代码实现的思想: 分析:  先来分析一下效果,这种以鼠标为中心坐标的缩放功能是通过Flash研究...
  • 一、中心旋转效果: 代码: var canvas = document.createElement('canvas'); canvas.width = 500; canvas.height = 500; canvas.style.backgroundColor = '#ddd'; document.body.appendChild(can...
  • CSS3图片以中心缩放,放大超出隐藏实现 首页,重点是有一个包裹img标签的容器,这里我们给该容器设置一个class为selfScale <div class="selfScale"> <img sr="#" /> </div>...
  • 应用场景:视频播放窗口缩放,最小保持100%帧图像:视频中的一帧图像视口:用于显示视频的区域可视...要达到以鼠标为中心缩放的目的,必须对可视区域进行相应计算,以下是伪代码说明:Bmp := TBitmap.Create;//帧...
  • MFC GDI+实现以鼠标为中心缩放图片(并且可以拖动)在开始之前我们先了解一下GDI+中的坐标系统 世界坐标(World Coordinate) 是用来制作特定绘图自然模型的坐标。 页面坐标(Page Coordinate) 则是指绘图接口(例如窗体...
  • 以某点为中心缩放视图

    千次阅读 2017-05-08 16:48:26
    以手势捏合缩放视图,缩放中心点为,手势的中心,或者某一点。
  • [Visual_Lisp] 批量物体中心缩放

    千次阅读 2011-08-31 22:36:05
    程序功能: 物体中心缩放,命令 scc,作者:qjchen ;; 注:此中心指的是物体的boundingbox(外包围圈矩形)的中心,非真正的形心 ;; 仅对于圆形,方形等,此中心同形心 (vl-load-com) (defun c:scc () (zxs)
  • 使用UnityShader实现图片沿中心缩放(附UE4中的3种实现方法)原理Unity中Shader的实现UE4中的3种实现方法方法1(使用虚幻自带的节点)方法2(使用蓝图节点自己计算)方法3(使用custom节点进行运算) 原理 在网上...
  • Raphael Js实现以鼠标中心缩放paper

    千次阅读 2020-06-19 22:22:41
    主要逻辑就是计算缩放前后鼠标所在位置偏差,来调整view起点坐标到鼠标坐标。 varscale; window.onload=function(){ ............... ............... scale={vari:.02,zoom:1,w:_pgsz[2],h:_pgsz[3],x:0,y:0}; } /...
  • MFC+Direct2D简化坐标缩放中记录了以坐标原点为基准点的坐标缩放的原理和过程,但在实际中,很多软件的缩放时以屏幕中心缩放点的,比如各种地图,以及各种计算软件生成的矢量图
  • 最近一个项目使用一张图片实现地图类似的效果,即图片以鼠标位置为中心缩放、平移;通过度娘搜索找到几个版本,最终下面这个版本真正实现该功能;具体代码是网上Copy的,若有版权或其他问题,请联系我予以处理,有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,349
精华内容 939
关键字:

中心缩放