• 模仿QQ截图片


    两个picturebox,一个放图片
    
    完整代码如下
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.OleDb;
    using System.Xml;
    namespace Test
    {
        public partial class Form1 : Form
        {
            private bool MouseIsDown = false;
            private int _x, _y;
            private Rectangle MouseRect = Rectangle.Empty;
            public Form1()
            {
                InitializeComponent();
            }
            private void ResizeToRectangle(Point p)
            {
                DrawRectangle();
                MouseRect.Width = p.X - MouseRect.Left;
                MouseRect.Height = p.Y - MouseRect.Top;
                DrawRectangle();
            }
            private void DrawRectangle()
            {
                Rectangle rect = this.RectangleToScreen(MouseRect);
                ControlPaint.DrawReversibleFrame(rect, Color.White, FrameStyle.Dashed);
    
            }
            private void DrawStart(Point StartPoint)
            {
                barkPictureBox.Capture = true;
                Cursor.Clip = this.RectangleToScreen(new Rectangle(0, 0, ClientSize.Width, ClientSize.Height));
                MouseRect = new Rectangle(StartPoint.X, StartPoint.Y, 0, 0);
            }
    
    
            private void button1_Click(object sender, EventArgs e)
            {
    
            }
    
    
            void barkPictureBox_MouseUp(object sender, MouseEventArgs e)
            {
                barkPictureBox.Capture = false;
                Cursor.Clip = Rectangle.Empty;
                MouseIsDown = false;
                DrawRectangle();
    
                if (MouseRect.X == 0 || MouseRect.Y == 0 || MouseRect.Width == 0 || MouseRect.Height == 0)  //如果区域有一个是0就返回
                {
                }
                else
                {
                    ///代码
                }
    
                MouseRect = Rectangle.Empty;
                int sx = _x < e.X ? _x : e.X;
                int sy = _y < e.Y ? _y : e.Y;
                int w = Math.Abs(_x - e.X);
                int h = Math.Abs(_y - e.Y);
                Graphics g = Graphics.FromHwnd(pictureBox2.Handle);
                g.Clear(pictureBox2.BackColor);
                g.DrawImage(barkPictureBox.Image, new Rectangle(0, 0, w, h), sx, sy, w, h, GraphicsUnit.Pixel); 
            }
    
            void barkPictureBox_MouseMove(object sender, MouseEventArgs e)
            {
                if (MouseIsDown) ResizeToRectangle(new Point(e.X + barkPictureBox.Location.X, e.Y + barkPictureBox.Location.Y));
               
            }
    
            void barkPictureBox_MouseDown(object sender, MouseEventArgs e)
            {
                _x = e.X;
                _y = e.Y;
    
                MouseIsDown = true;
                DrawStart(new Point(e.X + barkPictureBox.Location.X, e.Y + barkPictureBox.Location.Y));
            }
    
    
     
    
       
    
            private void Form1_Load(object sender, EventArgs e)
            {
                barkPictureBox.MouseDown += new MouseEventHandler(barkPictureBox_MouseDown);
                barkPictureBox.MouseMove += new MouseEventHandler(barkPictureBox_MouseMove);
                barkPictureBox.MouseUp += new MouseEventHandler(barkPictureBox_MouseUp);
    
            }
        }
    }
  • 相关阅读:
    图片尺寸批量resize的matlab并行代码
    Java使用QRCode.jar生成与解析二维码
    MySQL求两表的差集(非交集)
    sql笔记
    Oracle创建表空间创建用户授权
    身份证前6位地址码+码表+MySQL
    Jenkins时区设置为北京时间
    Oracle 使用MERGE INTO 语句 一条语句搞定新增编辑
    Oracle dd-m月-yy转yyyy-mm-dd
    docker 使用笔记
  • 原文地址:https://www.cnblogs.com/gc2013/p/3696743.html
Copyright © 2020-2023  润新知