一款簡單的縮放拖拽圖片控件

本文介紹一個針對 .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.pswp.cn/news/281501.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281501.shtml
英文地址,請注明出處:http://en.pswp.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;可…