一款简单的缩放拖拽图片控件

本文介绍一个针对 .NET 桌面应用程序的独立图片缩放拖拽显示控件 SQPhoto[1]

SQPhoto 是一个 Windows 桌面应用的组件,支持 .NET6 和 .NET Framework 4.6 + 。基于 PictureBox 的图片展示工具,增加了拖动和缩放功能,便于在某些场景下的图片展示,比如我前面开发的 Snipping_OCR[2] 工具就使用了这个组件。

c0430c3b3079501a679abf18722ce7ad.png
Snipping_OCR

该用户组件采用 Panel 和 PictureBox 组合的方式,控制 PictureBox 在 Panel 容器中显示的位置和大小来实现拖拽和放大缩小的功能。

/// <summary>
/// 计算鼠标移动位置是否还在容器内
/// </summary>
/// <returns></returns>
private bool IsMouseInPanel()
{if (PanBox.Left < PointToClient(Cursor.Position).X&& PointToClient(Cursor.Position).X < PanBox.Left + PanBox.Width&& PanBox.Top < PointToClient(Cursor.Position).Y&& PointToClient(Cursor.Position).Y < PanBox.Top + PanBox.Height){return true;}else{return false;}
}/// <summary>
/// 鼠标移动
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PicBox_MouseMove(object sender, MouseEventArgs e)
{//开启移动 左键按下 并且移动位置在框内if (_CanMove && isSelected && IsMouseInPanel()){PicBox.Location = new Point(PicBox.Left + (Cursor.Position.X - mouseDownPoint.X), PicBox.Top + (Cursor.Position.Y - mouseDownPoint.Y));mouseDownPoint = Cursor.Position;}
}

缩放的实现:

/// <summary>
/// 控制图片缩放
/// </summary>
/// <param name="change">变化情况,大于 0 放大,小于 0 缩小</param>
public void PicZoomSize(int change)
{var t = PicBox.Size;t.Width += change;t.Height += change;//控制最小缩放if (t.Width < _ZoomMin) return;PicBox.Size = t;//图片按中心比例放大缩小if (!_ZoomCenter) return;PicBox.Location = new Point((this.Width - PicBox.Width) / 2, (this.Height - PicBox.Height) / 2);
}
8dc3e212c6b35b44416f088232507cce.png
demo

以上组件和 Demo 仓库地址:https://github.com/sangyuxiaowu/SQPhoto

References

[1] SQPhoto: https://www.nuget.org/packages/SQPhoto/
[2] Snipping_OCR: https://github.com/sangyuxiaowu/Snipping_OCR

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓虚拟机与Hyper-V冲突

经过各种经验&#xff0c;哪个安卓虚拟机跟Hyper-V都存在着冲突。 解决方案一 程序中卸载Hyper-V&#xff0c;之后还要再配置太麻烦。 解决方案二 1、关掉Hyper-V的启动项&#xff0c;命令如下。 bcdedit /set hypervisorlaunchtype off 重启在开安卓模拟器蓝屏就没有了。 2、重…

共轨之家获吉利家族基金新一轮融资 5个月前曾获磐霖资本领投A轮融资

11月27日消息&#xff0c;近日&#xff0c;国内最大商用车技术服务平台共轨之家对外宣布完成新一轮融资。本轮融资由吉利家族基金投资&#xff0c;未来将推进共轨之家占领商用车后市场。 成立于2014年的共轨之家&#xff0c;以商用车技术知识科普社区起家&#xff0c;积累起国…

光伏产业的发展推动太阳能组件技术进步

从全球能源发展趋势的角度来看&#xff0c;太阳能等可再生能源势必逐步替代不可再生的传统能源&#xff0c;光伏产业将在全球各国的经济发展中扮演重要的角色。大力开发和利用光伏产业&#xff0c;对于优化我国能源结构&#xff0c;优化环境&#xff0c;保证我国社会经济可持续…

HTML怎么让div全透明,设置div为透明 怎样才让div里面的div不透明?

#a{ background:#FFCC33; filter:alpha(opacity:0); width: 300px; heig#a{background:#FFCC33; filter:alpha(opacity50); /*支持 IE 浏览器*/-moz-opacity:0.50; /*支持 FireFox 浏览器*/opacity:0.50; /*支持 Chrome, Opera, Safari 等浏览器*/width: 300px;height:300px;}还…

k64 datasheet学习笔记12---System Integration Module (SIM)

1.前言 Features of the SIM include: System clocking configuration&#xff08;1&#xff09;System clock divide values&#xff08;2&#xff09; Architectural clock gating control&#xff08;3&#xff09; USB clock selection and divide values&#xff08;4&…

informix linux安装步骤

informix linux安装步骤整个安装过程都以root用户运行1. 创建informix用户# groupadd informix# useradd -g informix informix2. 创建安装目录: "/opt/informix"# mkdir /opt/informix# chown informix.informix /opt/informixyum install libc.so.6 libncurses.so.…

html overflow 样式,css样式之overflow-x属性样式

overflow-x是overflow子花样&#xff0c;平日也很少用的。overflow-x设置匿伏溢出过宽模式(比如过宽图片)、设置对象底部转折条等重要。overflow-x语法与根本懂得1、overflow-x可设置值overflow-x : visible | auto | hidden| scroll值与解释引见&#xff1a;visible :  不剪切…

泰国能源部携手本土企业打造智慧城市

泰国能源部与泰国安美德集团签署谅解备忘录&#xff0c;共同投资开发新能源在工业生产领域的应用。俞懿春 摄 泰国能源部与泰国安美德&#xff08;AMATA&#xff09;集团昨天在曼谷签署谅解备忘录&#xff0c;以公私合作模式推动安美德智慧城市开发&#xff0c;响应泰国政府提出…

MAMP升级mysql5.6到5.7

RT 1.先把mamp环境停掉 sudo sh /Applications/MAMP/bin/stop.sh 2.然后使用brew安装mysql5.7 brew install mysql 3.默认安装的是最新版本&#xff0c;因为是5.7所以要手动设置一下root用户的密码,跟着步骤设置就行 /usr/local/Cellar/mysql/5.7.20/bin sudo ./mysql_secure_…

C# WPF GridControl用法举例

概述GridControl是Dev中的表格控件&#xff0c;类似于Winfrom中的DataGridView&#xff0c;以及WPF中的DataGrid&#xff0c;但是这个控件功能比原生的功能要强大很多&#xff0c;下面用实例举例说明此控件的用法.代码前台XAML&#xff1a;<UserControl x:Class"Calibu…

js中关于Blob对象的介绍与使用

js中关于Blob对象的介绍与使用 blob对象介绍 一个 Blob对象表示一个不可变的, 原始数据的类似文件对象。Blob表示的数据不一定是一个JavaScript原生格式 blob对象本质上是js中的一个对象&#xff0c;里面可以储存大量的二进制编码格式的数据。 创建blob对象 创建blob对象本质上…

计算机应用基础答案解析,计算机应用基础答案

专业课作业1.一般认为&#xff0c;世界上第一台电子数字计算机诞生于________。A.1946年2.当前的计算机一般被认为是第四代计算机&#xff0c;它所采用的逻辑元件是_______。C.大规模集成电路3、下列关于世界上第一台电子计算机ENIAC的叙述中&#xff0c;错误的是_______。D.确…

光伏发展路线图将发布 促产业优胜劣汰

工信部官网3月2日消息&#xff0c;工信部发布《2016年我国光伏产业运行情况》。2016年&#xff0c;我国光伏产业总产值达3360亿元&#xff0c;同比增长27%。下一步将继续发布《中国光伏产业发展路线图》(2017年版)&#xff0c;推动应用光伏系统的新能源充电设施试点&#xff0c…

20170102-文件处理

文件处理 正常文件处理 python 文件处理 编码 f open(file"兼职白领学生空姐模特护士练习方式.txt",mode"r",encoding"utf-8")#把值附给变量f &#xff08;路径file"文件是兼职白领学生空姐模特护士练习方式.txt"&#xff0c;文本模式…

博世豪掷10亿欧元德国建半导体工厂,要掌握自动驾驶芯片化核心竞争力?

日前&#xff0c;据路透社报道&#xff0c;全球顶级零部件供应商博世正在位于德国东部的德累斯顿市兴建半导体工厂&#xff0c;总投资预计达10亿欧元(约合11亿美元)。据悉&#xff0c;此举凸显了博世对自动驾驶汽车以及工业物联网方向的双重布局。 据雷锋网(公众号&#xff1a;…

创建.NET程序Dump的几种姿势

当一个应用程序运行的有问题时&#xff0c;生成一个 Dump 文件来调试它可能会很有用。在 Windows、Linux 或 Azure 上有许多方法可以生成转储文件。Windows 平台dotnet-dump (Windows)dotnet-dump 全局工具[1]是一种收集和分析.NET 核心应用程序 Dump 的方法。安装 dotnet-dump…

计算机专业英语怎么翻译,计算机专业英语翻译(附件).pdf

Lesson 1. PC 概述概述概述概述提到 “技术”一词&#xff0c;大多数人会想到计算机。我们生活中的几乎每个方面都有一些计算机化的成份。家里的电器中内置了微处理器&#xff0c;电视机也是如此&#xff0c;就连汽车上面也有计算机。但是&#xff0c;人们首先想到的计算机通常…

自然语言处理怎么最快入门?

2019独角兽企业重金招聘Python工程师标准>>> 本文整理自知乎上的一个问答&#xff0c;分享给正在学习自然然语言处理的朋友们&#xff01; 一、自然语言处理是什么&#xff1f; 自然语言处理说白了&#xff0c;就是让机器去帮助我们完成一些语言层面的事情&#xff…

点分治题表

poj1741: tree bzoj2152: 聪聪可可 bzoj2599: [IOI2011]Race [SPOJ1825]免费旅行 bzoj4016: [FJOI2014]最短路径树问题 &#xff08;字典序挺骚&#xff09; 转载于:https://www.cnblogs.com/TSHugh/p/8179241.html

dotnet-exec 0.8.0 released

dotnet-exec 0.8.0 releasedIntrodotnet-exec 是一个 C# 程序的小工具&#xff0c;可以用来运行一些简单的 C# 程序而无需创建项目文件&#xff0c;而且可以自定义项目的入口方法&#xff0c;支持但不限于 Main 方法Install/Updatedotnet-exec 是一个 dotnet tool&#xff0c;可…