欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用C#實(shí)現(xiàn)對任意區(qū)域任意大小的截圖

 更新時間:2024年01月30日 15:30:32   作者:lingxiao16888  
這篇文章主要為大家詳細(xì)介紹了如何使用C#實(shí)現(xiàn)簡單的截圖功能,可以對任意區(qū)域任意大小的截圖,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1.目的

實(shí)現(xiàn)類似系統(tǒng)截圖工具那樣對屏幕任何區(qū)域自定義大小的截圖。

2.效果展示

點(diǎn)擊截圖

選擇需要截圖的區(qū)域:

區(qū)域選擇完成后,單擊右鍵完成截圖:

在合適的載體上粘貼截圖:

3.代碼

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
            //獲取屏幕截屏
            Bitmap bcgImg = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            using (Graphics g= Graphics.FromImage(bcgImg))
            {
                g.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(bcgImg.Width, bcgImg.Height));
 
            }
            //將圖片傳給截圖窗口
            CaptureFrm frm = new CaptureFrm(bcgImg);
            frm.TopMost = true;
           if( frm.ShowDialog()== DialogResult.OK)
            {
                MessageBox.Show("截圖已保存至剪貼板,請選擇合適的載體進(jìn)行粘貼!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("取消截圖","提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            this.WindowState = FormWindowState.Normal;
        }
    }
public partial class CaptureFrm : Form
    {
        Bitmap bcgImg;
        bool drawingFlag=false;
        Point startPoint;
        Point endPoint;
        Graphics main_g;
        bool isCapture=false;
        public CaptureFrm(Bitmap img)
        {
            InitializeComponent();
            bcgImg = img;
        }
 
        private void CaptureFrm_Load(object sender, EventArgs e)
        {
            //背景
            this.BackgroundImage = bcgImg;
            this.BackgroundImageLayout = ImageLayout.Stretch;
 
        }
 
        private void CaptureFrm_KeyDown(object sender, KeyEventArgs e)
        {
            //如果按下ESC鍵則退出
            if (e.KeyCode == Keys.Escape)
            {
                //  this.Close();
                DialogResult = DialogResult.Cancel;
            }
        }
 
        private void CaptureFrm_MouseDown(object sender, MouseEventArgs e)
        {
          if(e.Button== MouseButtons.Left)
            {
                drawingFlag = true;
                startPoint = e.Location;
                main_g = this.CreateGraphics();
            }
          if(e.Button== MouseButtons.Right)
            {
                if (isCapture)
                {
                    Bitmap map = new Bitmap(width, height);
                    Bitmap source = new Bitmap(bcgImg, new Size(this.Width, this.Height));
                    using (Graphics g = Graphics.FromImage(map))
                    {
                        g.DrawImage(source, new Rectangle(0, 0, map.Width, map.Height), new Rectangle(recX, recY, width, height), GraphicsUnit.Pixel);
                    }
                    Clipboard.SetImage(map);
                    main_g.Dispose();
                    DialogResult = DialogResult.OK;
                    isCapture = false;
                }
            }
            
            
        }
 
        private void CaptureFrm_MouseUp(object sender, MouseEventArgs e)
        {
            if(e.Button== MouseButtons.Left)
            {
                //進(jìn)行最終邊界確認(rèn)
                endPoint = e.Location;
                drawingFlag = false;
                isCapture = true;
            }
           
        }
        int recX, recY, width, height;
        private void CaptureFrm_MouseMove(object sender, MouseEventArgs e)
        {
            if (!drawingFlag ||main_g==null) return;
            
            width = Math.Abs(startPoint.X - e.X);
            height = Math.Abs(startPoint.Y - e.Y);
            if (startPoint.X < e.X)
            {
                recX = startPoint.X;
            }
            else
            {
                recX = startPoint.X-width;
            }
            if (startPoint.Y < e.Y)
            {
                recY = startPoint.Y;
            }
            else
            {
                recY = startPoint.Y-height;
            }
            CaptureFrm_Paint(null, null);
            Pen pen = new Pen(Color.Green, 2);
            pen.DashPattern = new float[] { 1, 2 };
            pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
            main_g.DrawRectangle(pen, recX, recY, width, height);
            string ss = $"X:{recX},Y:{recY}\n width:{width},height:{height}";
            main_g.DrawString(ss, new Font("宋體", 12,FontStyle.Bold), Brushes.Red, new Point(10, 10));
        }
 
        private void CaptureFrm_Paint(object sender, PaintEventArgs e)
        {
            if (main_g == null) return;
          //  main_g.Clear(Color.WhiteSmoke);
            main_g.DrawImage(bcgImg, new Rectangle(0, 0, this.Width, this.Height), new Rectangle(0, 0, bcgImg.Width, bcgImg.Height), GraphicsUnit.Pixel);
           
        }
 
        private void CaptureFrm_DoubleClick(object sender, EventArgs e)
        {
           
        }
    }

到此這篇關(guān)于使用C#實(shí)現(xiàn)對任意區(qū)域任意大小的截圖的文章就介紹到這了,更多相關(guān)C#截圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于C#實(shí)現(xiàn)Windows服務(wù)的方法詳解

    基于C#實(shí)現(xiàn)Windows服務(wù)的方法詳解

    在實(shí)際應(yīng)用過程中,有時候我們希望開發(fā)的程序,不需要界面,直接開機(jī)就可以長時間運(yùn)行,這時候,我們可以考慮做成一個Windows服務(wù)。這篇文章跟大家介紹一下,如何基于C#實(shí)現(xiàn)Windows服務(wù)的創(chuàng)建、安裝、啟動、停止和卸載,需要的可以參考一下
    2022-09-09
  • c# 獲取網(wǎng)頁中指定的字符串信息的實(shí)例代碼

    c# 獲取網(wǎng)頁中指定的字符串信息的實(shí)例代碼

    c# 獲取網(wǎng)頁中指定的字符串信息的實(shí)例代碼,需要的朋友可以參考一下
    2013-04-04
  • C#使用自定義的泛型節(jié)點(diǎn)類實(shí)現(xiàn)二叉樹類

    C#使用自定義的泛型節(jié)點(diǎn)類實(shí)現(xiàn)二叉樹類

    這篇文章主要為大家詳細(xì)介紹了C#如何使用自定義的泛型節(jié)點(diǎn)類 Node<T>實(shí)現(xiàn)二叉樹類BinaryTree<T>及其方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • C#基礎(chǔ)入門之值類型和引用類型的區(qū)別詳析

    C#基礎(chǔ)入門之值類型和引用類型的區(qū)別詳析

    在C#中值類型的變量直接存儲數(shù)據(jù),而引用類型的變量持有的是數(shù)據(jù)的引用,數(shù)據(jù)存儲在數(shù)據(jù)堆中,下面這篇文章主要給大家介紹了關(guān)于C#基礎(chǔ)入門之值類型和引用類型區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • C#數(shù)據(jù)結(jié)構(gòu)揭秘一

    C#數(shù)據(jù)結(jié)構(gòu)揭秘一

    本文一介紹了數(shù)據(jù)結(jié)構(gòu)的基本概念 而介紹了算法的基本概念,并且重點(diǎn)討論了算法時間復(fù)雜度,并且用程序予以證明
    2012-10-10
  • C#使用RegNotifyChangeKeyValue監(jiān)聽注冊表更改的方法小結(jié)

    C#使用RegNotifyChangeKeyValue監(jiān)聽注冊表更改的方法小結(jié)

    RegNotifyChangeKeyValue的最后一個參數(shù)傳遞false,表示以同步的方式監(jiān)聽,這篇文章主要介紹了C#使用RegNotifyChangeKeyValue監(jiān)聽注冊表更改的方法小結(jié),需要的朋友可以參考下
    2024-06-06
  • 詳細(xì)介紹C#之文件校驗(yàn)工具的開發(fā)及問題

    詳細(xì)介紹C#之文件校驗(yàn)工具的開發(fā)及問題

    目前校驗(yàn)文件使用最多的是MD值和SHA值,不外乎有些使用CRC,前段時間微軟發(fā)布了VisualStudio正式版,win鏡像,微軟官方給出的校驗(yàn)方式都是校驗(yàn)文件的SHA值。下面詳細(xì)介紹C#之文件校驗(yàn)工具的開發(fā)及問題,需要的朋友可以參考下
    2015-07-07
  • 深入c# GDI+簡單繪圖的具體操作步驟(二)

    深入c# GDI+簡單繪圖的具體操作步驟(二)

    本篇文章是對GDI+簡單繪圖的繪圖知識進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#中的虛方法和抽象方法的運(yùn)用

    C#中的虛方法和抽象方法的運(yùn)用

    這篇文章主要介紹了C#中的虛方法和抽象方法的運(yùn)用,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C# 8.0可空引用類型的使用注意記錄

    C# 8.0可空引用類型的使用注意記錄

    這篇文章主要給大家介紹了關(guān)于C# 8.0可空引用類型使用注意的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評論