最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#調用halcon實現使用鼠標滾輪對圖片進行縮放顯示

 更新時間:2024年03月11日 10:24:38   作者:花飛花落花滿樓  
這篇文章主要為大家詳細介紹了C#如何調用halcon實現使用鼠標滾輪對圖片進行縮放顯示,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

功能需求

我們在Winform的界面載入了圖片,希望使用鼠標滾輪對圖片進行縮放顯示。

思路分享

鼠標滾輪事件就是使用MouseWheel,然后根據事件的e.Delta屬性值的正負來區(qū)分是放大還是縮小操作,這一點比較清晰明朗,也較為簡單。

對圖片的縮放功能,我們很自然的就會想到使用halcon函數“zoom_image_factor”,但是當我實際使用該函數后,發(fā)現經過來回的幾次放大和縮小動作后,圖片已經完全失真到模糊了。

所以我發(fā)現如果只是對圖片進行縮放顯示的話,重點應該是“顯示”,而不是“圖片縮放”,應該對顯示的窗口進行相應的操作。最后我們用到的主要函數應該是“HWindow.SetPart()”。

界面功能

這次我們是用的是“HSmartWindowControl”,我們可以直接用鼠標在控件中對圖片進行拖動。

點擊“加載圖片”按鈕,將圖片載入顯示在HSmartWindowControl中。

鼠標左鍵點擊圖片顯示控件,上下滑動鼠標滾輪可以對圖片進行縮放顯示。

鼠標右鍵點擊圖片顯示控件,會彈出“contextMenuStrip”,點擊“適中”會將圖片自適應顯示在控件中。

代碼展示

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using HalconDotNet;
 
namespace WindowsFormsApp8
{
    public partial class Form1 : Form
    {
 
        HWindow window;
        HImage image;
        String imagePath = @"..\..\image\apple_1.png";
 
 
        public Form1()
        {
            InitializeComponent();
            window = hWindowControl1.HalconWindow;
            image = new HImage();
            this.hWindowControl1.MouseWheel += new MouseEventHandler(hWindowControl1_MouseWheel);
            //這里自己寫代碼綁定鼠標滾輪事件,HMouseWheel事件好像不太管用
 
        }
 
        private void hWindowControl1_MouseWheel(object sender, MouseEventArgs e)
        {
            //先獲得窗口相對于圖片的實際位置
            window.GetPart(out int row1, out int col1, out int row2, out int col2);
            if (e.Delta > 0)
            {
 
                window.SetPart(row1 - 5, col1 - 5, row2 + 5, col2 + 5);//擴大窗口,縮小圖片顯示
            }
            else
            {
                if (row1 + 5 < row2 - 5 && col1 + 5 < col2 - 5)//保證窗口可視
                {
                    window.SetPart(row1 + 5, col1 + 5, row2 - 5, col2 - 5);//縮小窗口,增強圖片細節(jié)顯示,類似于放大圖片
                }
 
            }
 
            window.DispObj(image);
 
        }
 
        private void btn_loadimage_Click(object sender, EventArgs e)
        {
            image.ReadImage(imagePath);
            image.GetImageSize(out int width, out int height);
            window.DispObj(image);
            tb_width.Text = width.ToString();
            tb_height.Text = height.ToString();
 
        }
 
 
 
        private void hWindowControl1_HMouseDown(object sender, HMouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                //右鍵彈出自定義菜單
                contextMenuStrip1.Show(MousePosition.X, MousePosition.Y);
            }
        }
 
        private void 適中ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            image.GetImageSize(out int width, out int height);
            window.SetPart(0, 0, height, width);//窗口適中顯示圖片
            window.DispObj(image);
        }
    }
}

鼠標滾輪動作時,先使用“GetPart()”獲取當前窗口左上角和右下角相對于原圖像的位置。

如果想縮小顯示,則需要將窗口左上角和右下角的相對位置遠離,擴大窗口能看圖像更多內容。

如果想放大顯示,則需要將窗口左上角和右下角的相對位置靠近(但是要保證左上角行列值小于右下角),縮小窗口能看到圖像更多細節(jié)。

至于縮放移動的像素距離,我這里設置的都是5,大家也可以根據圖像實際的寬高比例,將row和col縮放的變化值設置為相應比例的兩個值。

到此這篇關于C#調用halcon實現使用鼠標滾輪對圖片進行縮放顯示的文章就介紹到這了,更多相關C#圖片縮放顯示內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C#泛型概念的簡介與泛型的使用

    C#泛型概念的簡介與泛型的使用

    今天小編就為大家分享一篇關于C#泛型概念的簡介與泛型的使用,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • C#事件中關于sender的用法解讀

    C#事件中關于sender的用法解讀

    這篇文章主要介紹了C#事件中關于sender的用法解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • C#中按指定質量保存圖片的實例代碼

    C#中按指定質量保存圖片的實例代碼

    這篇文章主要介紹了C#中按指定質量保存圖片的實例代碼,有需要的朋友可以參考一下
    2013-12-12
  • WPF+ASP.NET?SignalR實現簡易在線聊天功能的示例代碼

    WPF+ASP.NET?SignalR實現簡易在線聊天功能的示例代碼

    這篇文章將以一個簡單的聊天示例,簡述如何通過WPF+ASP.NET?SignalR實現消息后臺通知,僅供學習分享使用,如有不足之處,還請指正
    2022-09-09
  • c#中的interface abstract與virtual介紹

    c#中的interface abstract與virtual介紹

    abstract 與virtual : 方法重寫時都使用 override 關鍵字,interface中的方法和abstract方法都要求實現
    2013-07-07
  • C#獲取當前成員函數的函數名的幾種常用方法

    C#獲取當前成員函數的函數名的幾種常用方法

    本文介紹了在C#中獲取當前成員函數名稱的幾種方法,包括反射、nameof、CallerMemberName、StackTrace和表達式樹,并給出了最佳實踐推薦,需要的朋友可以參考下
    2026-02-02
  • C#中的csc命令和dotnet命令詳解

    C#中的csc命令和dotnet命令詳解

    C#中的csc是命令行編譯器,用于編譯.cs生成.exe或.dll;dotnet是跨平臺工具,支持項目構建、運行及包管理,推薦用于現代開發(fā),本文給大家介紹C#中的csc命令和dotnet命令,感興趣的朋友一起看看吧
    2025-07-07
  • C#如何從byte[]中直接讀取Structure實例詳解

    C#如何從byte[]中直接讀取Structure實例詳解

    這篇文章主要給大家介紹了關于利用C#如何從byte[]里直接讀取Structure的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • C#使用foreach語句遍歷堆棧(Stack)的方法

    C#使用foreach語句遍歷堆棧(Stack)的方法

    這篇文章主要介紹了C#使用foreach語句遍歷堆棧(Stack)的方法,涉及C#操作foreach實現遍歷堆棧的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#中判斷本地系統的網絡連接狀態(tài)的方法

    C#中判斷本地系統的網絡連接狀態(tài)的方法

    C#中一般通過InternetGetConnectedState函數返回本地系統的網絡連接狀態(tài),下面簡單介紹下,需要的朋友可以參考下
    2013-10-10

最新評論

香格里拉县| 水城县| 新民市| 梓潼县| 铜山县| 民勤县| 兰坪| 腾冲县| 新化县| 利辛县| 南开区| 襄垣县| 开远市| 温州市| 广河县| 嘉祥县| 原平市| 枝江市| 元阳县| 镇雄县| 文昌市| 山阴县| 惠安县| 广元市| 武鸣县| 临桂县| 江阴市| 纳雍县| 阜宁县| 铜陵市| 平谷区| 敖汉旗| 荆州市| 高要市| 无锡市| 赤水市| 永修县| 巴塘县| 探索| 基隆市| 钦州市|