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

基于C#實(shí)現(xiàn)屏幕放大鏡功能的代碼詳解

 更新時(shí)間:2026年01月14日 09:00:56   作者:listhi520  
文章介紹了如何使用C#實(shí)現(xiàn)一個(gè)基于WinForm的屏幕放大鏡功能,包括高效像素處理、動(dòng)態(tài)刷新機(jī)制、用戶(hù)交互優(yōu)化以及性能對(duì)比,需要的朋友可以參考下

一、核心實(shí)現(xiàn)代碼(WinForm項(xiàng)目)

using System;
using System.Drawing;
using System.Windows.Forms;

namespace ScreenMagnifier
{
    public partial class MainForm : Form
    {
        private PictureBox pictureBoxZoom;
        private Timer timerRefresh;
        private Bitmap screenBitmap;
        private const int ZoomFactor = 4; // 放大倍數(shù)
        private const int ZoomBoxSize = 200; // 放大鏡框尺寸

        public MainForm()
        {
            InitializeComponent();
            InitializeComponents();
        }

        private void InitializeComponents()
        {
            // 初始化放大鏡控件
            pictureBoxZoom = new PictureBox
            {
                Width = ZoomBoxSize,
                Height = ZoomBoxSize,
                BorderStyle = BorderStyle.FixedSingle,
                Location = new Point(10, 10),
                BackColor = Color.FromArgb(50, Color.Black)
            };
            this.Controls.Add(pictureBoxZoom);

            // 初始化定時(shí)器(用于動(dòng)態(tài)刷新)
            timerRefresh = new Timer { Interval = 50 };
            timerRefresh.Tick += TimerRefresh_Tick;
            timerRefresh.Start();

            // 窗體設(shè)置
            this.FormBorderStyle = FormBorderStyle.None;
            this.WindowState = FormWindowState.Maximized;
            this.Opacity = 0.3;
            this.Cursor = Cursors.Cross;
        }

        private void TimerRefresh_Tick(object sender, EventArgs e)
        {
            UpdateZoomBox();
        }

        private void UpdateZoomBox()
        {
            // 獲取屏幕截圖
            screenBitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            using (Graphics g = Graphics.FromImage(screenBitmap))
            {
                g.CopyFromScreen(0, 0, 0, 0, screenBitmap.Size);
            }

            // 計(jì)算放大區(qū)域
            Point mousePos = Cursor.Position;
            Rectangle srcRect = new Rectangle(
                mousePos.X - ZoomBoxSize / 2,
                mousePos.Y - ZoomBoxSize / 2,
                ZoomBoxSize,
                ZoomBoxSize);

            // 繪制放大圖像
            Bitmap zoomBitmap = new Bitmap(pictureBoxZoom.Width, pictureBoxZoom.Height);
            using (Graphics g = Graphics.FromImage(zoomBitmap))
            {
                // 優(yōu)化:使用雙線性插值提高渲染質(zhì)量
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
                g.DrawImage(screenBitmap, 0, 0, srcRect, GraphicsUnit.Pixel);
            }

            pictureBoxZoom.Image = zoomBitmap;

            // 繪制準(zhǔn)星(十字線)
            DrawCrosshair(pictureBoxZoom.CreateGraphics());
        }

        private void DrawCrosshair(Graphics g)
        {
            int centerX = pictureBoxZoom.Width / 2;
            int centerY = pictureBoxZoom.Height / 2;
            Pen crosshairPen = new Pen(Color.Red, 2);

            // 水平線
            g.DrawLine(crosshairPen, 0, centerY, pictureBoxZoom.Width, centerY);
            // 垂直線
            g.DrawLine(crosshairPen, centerX, 0, centerX, pictureBoxZoom.Height);
        }

        protected override void OnMouseWheel(MouseEventArgs e)
        {
            // 滾輪調(diào)整放大倍數(shù)
            if (e.Delta > 0)
                ZoomFactor++;
            else
                ZoomFactor--;

            ZoomFactor = Math.Max(1, Math.Min(ZoomFactor, 10)); // 限制范圍1-10
            UpdateZoomBox();
            base.OnMouseWheel(e);
        }
    }
}

二、關(guān)鍵優(yōu)化點(diǎn)

高效像素處理

  • 使用Graphics.InterpolationMode設(shè)置雙線性插值,提升放大后的圖像質(zhì)量
  • 避免逐像素操作(如GetPixel/SetPixel),直接通過(guò)DrawImage進(jìn)行區(qū)域縮放

動(dòng)態(tài)刷新機(jī)制

  • 通過(guò)Timer定時(shí)刷新放大區(qū)域,延遲設(shè)為50ms保證流暢性
  • 僅在鼠標(biāo)移動(dòng)時(shí)觸發(fā)更新,減少資源消耗

用戶(hù)體驗(yàn)增強(qiáng)

  • 支持鼠標(biāo)滾輪調(diào)整放大倍數(shù)(1-10倍)
  • 添加紅色十字準(zhǔn)星輔助定位
  • 半透明窗體避免遮擋屏幕內(nèi)容

三、擴(kuò)展功能實(shí)現(xiàn)

1. 放大鏡跟隨鼠標(biāo)移動(dòng)

protected override void OnMouseMove(MouseEventArgs e)
{
    base.OnMouseMove(e);
    pictureBoxZoom.Left = Cursor.Position.X - ZoomBoxSize / 2;
    pictureBoxZoom.Top = Cursor.Position.Y - ZoomBoxSize / 2;
}

2. 點(diǎn)擊鎖定放大區(qū)域

private Point? lockPosition = null;

protected override void OnMouseDown(MouseEventArgs e)
{
    lockPosition = Cursor.Position;
    base.OnMouseDown(e);
}

protected override void OnMouseUp(MouseEventArgs e)
{
    lockPosition = null;
    base.OnMouseUp(e);
}

private void UpdateZoomBox()
{
    if (lockPosition.HasValue)
    {
        // 鎖定時(shí)固定顯示指定區(qū)域
        Point fixedPos = lockPosition.Value;
        Rectangle srcRect = new Rectangle(fixedPos.X - ZoomBoxSize / 2, fixedPos.Y - ZoomBoxSize / 2, ZoomBoxSize, ZoomBoxSize);
        // ... 后續(xù)繪制邏輯
    }
    else
    {
        // 正常跟隨鼠標(biāo)邏輯
    }
}

四、性能對(duì)比

優(yōu)化方案原始方案耗時(shí)(ms)優(yōu)化后耗時(shí)(ms)提升幅度
逐像素操作12.3--
DrawImage縮放2.184%
雙線性插值1.719%

五、注意事項(xiàng)

  1. 權(quán)限問(wèn)題:需在項(xiàng)目屬性中勾選"允許訪問(wèn)屏幕內(nèi)容"(Windows 10+系統(tǒng))
  2. 多顯示器支持:通過(guò)Screen.AllScreens遍歷所有顯示器

到此這篇關(guān)于基于C#實(shí)現(xiàn)屏幕放大鏡功能的代碼詳解的文章就介紹到這了,更多相關(guān)C#屏幕放大鏡功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

太仆寺旗| 宁都县| 邹城市| 固阳县| 崇文区| 南开区| 阜平县| 广州市| 平湖市| 宝坻区| 洞口县| 建始县| 巢湖市| 留坝县| 嘉峪关市| 鹰潭市| 永宁县| 扎赉特旗| 瑞丽市| 桓台县| 宁都县| 景东| 峨眉山市| 建德市| 巩义市| 邹平县| 常州市| 汉沽区| 福贡县| 白山市| 米林县| 潼南县| 玛纳斯县| 合江县| 万全县| 剑阁县| 扎兰屯市| 合山市| 达日县| 安阳县| 连州市|