• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C# 实现QQ式截图功能实例代码

C# 实现QQ式截图功能实例代码

作者:FelixWang 字体:[增加 减小] 来源:互联网 时间:2017-05-28

FelixWang 通过本文主要向大家介绍了马桶c的个人空间,c语言,欲情 c max,维生素c,crh2c等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

这个功能一共有两部分组成,第一部分是窗体代码,另外的一部分是一个辅助方法。直接贴出代码,以供大家参考:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using ImageClassLib;
namespace ImageShear
{
  public partial class Demo: Form
  {
    public Demo()
    {
      InitializeComponent();
    }
    #region 点击打开图像
    public string strHeadImagePath; //打开图片的路径
    Bitmap Bi; //定义位图对像
    private void button1_Click(object sender, EventArgs e)
    {
      openFileDialog1.Filter = "*.gif|*.jpg|*.JPEG|*.JPEG|*.bmp|*.bmp";     //设置读取图片类型
      if (openFileDialog1.ShowDialog() == DialogResult.OK)
      {
        try
        {
          strHeadImagePath = openFileDialog1.FileName;
          //this.Show(strHeadImagePath);
          Bi = new Bitmap(strHeadImagePath); //使用打开的图片路径创建位图对像
          ImageCut1 IC = new ImageCut1(40, 112, this.pictureBox1.Width, this.pictureBox1.Height);   //实例化ImageCut类,四个参数据分别表示为:x、y、width、heigth,(40、112)表示pictureBox1的Lcation的坐标,(120、144)表示pictureBox1控件的宽度和高度
          this.pictureBox1.Image = IC.KiCut1((Bitmap)(this.GetSelectImage(this.pictureBox1.Width, this.pictureBox1.Height)));   //(120、144)表示pictureBox1控件的宽度和高度
          //this.pictureBox1.Image = (this.GetSelectImage(120, 144));
        }
        catch (Exception ex)
        {
          MessageBox.Show("格式不对");
          ex.ToString();
        }
      }
    }
    #endregion
    #region 定义显示图像方法,即将打开的图像在pictureBox1控件显示
    public void Show(string strHeadImagePath)
    {
      this.pictureBox1.Load(@strHeadImagePath);  //
    }
    #endregion
    #region 获取图像
    /// <summary>
    /// 获取指定宽度和高度的图像即使图片和pictureBox1控件一样宽和高,返回值为图片Image
    /// </summary>
    /// <param name="Width表示宽"></param>
    /// <param name="Height表示高"></param>
    /// <returns></returns>
    public Image GetSelectImage(int Width, int Height)
    {
      //Image initImage = this.pictureBox1.Image;
      Image initImage = Bi;
      //原图宽高均小于模版,不作处理,直接保存 
      if (initImage.Width <= Width && initImage.Height <= Height)
      {
        //initImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);
        return initImage;
      }
      else
      {
        //原始图片的宽、高 
        int initWidth = initImage.Width;
        int initHeight = initImage.Height;

        //非正方型先裁剪为正方型 
        if (initWidth != initHeight)
        {
          //截图对象 
          System.Drawing.Image pickedImage = null;
          System.Drawing.Graphics pickedG = null;

          //宽大于高的横图 
          if (initWidth > initHeight)
          {
            //对象实例化 
            pickedImage = new System.Drawing.Bitmap(initHeight, initHeight);
            pickedG = System.Drawing.Graphics.FromImage(pickedImage);
            //设置质量 
            pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            //定位 
            Rectangle fromR = new Rectangle((initWidth - initHeight) / 2, 0, initHeight, initHeight);
            Rectangle toR = new Rectangle(0, 0, initHeight, initHeight);
            //画图 
            pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);
            //重置宽 
            initWidth = initHeight;
          }
          //高大于宽的竖图 
          else
          {
            //对象实例化
            pickedImage = new System.Drawing.Bitmap(initWidth, initWidth);
            pickedG = System.Drawing.Graphics.FromImage(pickedImage);
            //设置质量 
            pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            //定位 
            Rectangle fromR = new Rectangle(0, (initHeight - initWidth) / 2, initWidth, initWidth);
            Rectangle toR = new Rectangle(0, 0, initWidth, initWidth);
            //画图 
            pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);
            //重置高 
            initHeight = initWidth;
          }

          initImage = (System.Drawing.Image)pickedImage.Clone();
          //        //释放截图资源 
          pickedG.Dispose();
          pickedImage.Dispose();
        }

        return initImage;
      }
    }
    #endregion
    #region 点击button2按钮事件
    private void button2_Click(object sender, EventArgs e)
    {
      this.label1.Text = "裁剪后的图片宽度:"+this.pictureBox2.Width.ToString();
      this.label2.Text = "裁剪后的图片高度:"+this.pictureBox2.Height.ToString();
    }
    #endregion
    #region 缩放、裁剪图像用到的变量
    /// <summary>
    /// 
    /// </summary>
    int x1;   //鼠标按下时横坐标
    int y1;   //鼠标按下时纵坐标
    int width; //所打开的图像的宽
    int heigth; //所打开的图像的高
    bool HeadImageBool = false;  // 此布尔变量用来判断pictureBox1控件是否有图片
    #endregion
    #region 画矩形使用到的变量
    Point p1;  //定义鼠标按下时的坐标点
    Point p2;  //定义移动鼠标时的坐标点
    Point p3;  //定义松开鼠标时的坐标点
    #endregion
    #region 鼠标按下时发生的事件
    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
      this.Cursor = Cursors.Cross;
      this.p1 = new Point(e.X, e.Y);
      x1 = e.X;
      y1 = e.Y;
      if (this.pictureBox1.Image != null)
      {
        HeadImageBool = true;
      }
      else
      {
        HeadImageBool = false;
      }
    }
    #endregion
    #region 移动鼠标发生的事件
    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
      if (this.Cursor == Cursors.Cross)
      {
        this.p2 = new Point(e.X, e.Y);
        if ((p2.X - p1.X) > 0 && (p2.Y - p1.Y) > 0)   //当鼠标从左上角向开始移动时P3坐标
        {
          this.p3 = new Point(p1.X, p1.Y);
        }
        if ((p2.X - p1.X) < 0 && (p2.Y - p1.Y) > 0)   //当鼠标从右上角向左下方向开始移动时P3坐标
        {
          this.p3 = new Point(p2.X, p1.Y);
        }
        if ((p2.X - p1.X) > 0 && (p2.Y - p1.Y) < 0)   //当鼠标从左下角向上开始移动时P3坐标
        {
          this.p3 = new Point(p1.X, p2.Y);
        }
        if ((p2.X - p1.X) < 0 && (p2.Y - p1.Y) < 0)   //当鼠标从右下角向左方向上开始移动时P3坐标
        {
          this.p3 = new Point(p2.X, p2.Y);
        }
        this.pictureBox1.Invalidate(); //使控件的整个图面无效,并导致重绘控件
      }
    }
    #endregion
    #region 松开鼠标发生的事件,实例化ImageCut1类对像
    ImageCut1 IC1; //定义所画矩形的图像对像
    private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
    {
      if (HeadImageBool)
      {
        width = this.pictureBox1.Image.Width;
        heigth = this.pictureBox1.Image.Height;
        if ((e.X - x1) > 0 && (e.Y - y1) > 0)  //当鼠标从左上角向右下方向开始移动时发生
        {
          IC1 = new ImageCut1(x1, y1, Math.Abs(e.X - x1), Math.Abs(e.Y - y1));  //实例化ImageCut1类
        }
        if ((e.X - x1) < 0 && (e.Y - y1) > 0)  //当鼠标从右上角向左下方向开始移动时发生
        {
          IC1 = new ImageCut1(e.X, y1, Math.Abs(e.X - x1), Math.Abs(e.Y - y1));  //实例化ImageCut1类
        }
        if ((e.X - x1) > 0 && (e.Y - y1) < 0)  //当鼠标从左下角向右上方向开始移动时发生
        {
       



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#利用ReportViewer生成报表
  • C#基于正则去掉注释的方法示例
  • C#中new的用法及与override的区别分析
  • C#实现两个richtextbox控件滚动条同步滚动的简单方法
  • C# for循环的经典案例集锦
  • C#操作word的方法示例
  • C#使用WebClient登录网站并抓取登录后的网页信息实现方法
  • C# WinForm制作异形窗体与控件的方法
  • C#实现Excel表数据导入Sql Server数据库中的方法
  • C#使用NPOI上传excel

相关文章

  • 2017-05-28混合语言编程—C#使用原生的Directx和OpenGL绘图的方法
  • 2017-05-28C#实现Excel导入sqlite的方法
  • 2017-05-28C#制作多线程处理强化版网络爬虫
  • 2017-05-28C#中string.format用法详解
  • 2017-05-28C#中单例的实现方法
  • 2017-05-28c# rsa注册实现加密文字
  • 2017-05-28C#从文件或标准输入设备读取指定行的方法
  • 2017-05-28使用c#在word文档中创建表格的方法详解
  • 2017-05-28C#实现随鼠标移动窗体实例
  • 2017-05-28C#、ASP.NET通用工具类IsWhat?(可以判断数字、身份证、数据类型等等)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 深入C#字符串和享元(Flyweight)模式的使用分析
    • C#基础之委托用法实例教程
    • C#导出Excel的方法
    • C#实现从多列的DataTable里取需要的几列
    • C#事件访问器详解
    • C#自定义事件监听实现方法
    • C#图像处理之木刻效果实现方法
    • C#非递归先序遍历二叉树实例
    • C#中math类的全部运算方法(总结)
    • C#基础 延迟加载介绍与实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有