好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#实现鼠标裁剪图像功能

本文实例为大家分享了C#实现鼠标裁剪图像的具体代码,供大家参考,具体内容如下

C#的图像裁剪很容易操作,这里给个实现的例子。

关键是需要处理鼠标的事件和一些更新

实现鼠标移动的代码.注意更新不要全部重画,只有选择矩形部分重画

?

private void Form1_MouseMove( object sender, MouseEventArgs e)

  {

 

   if (Track_move)

   endpoint = new Point(e.X, e.Y);

   else

   {

   return ;

   }

   rect1 = new Rectangle(stpoint.X, stpoint.Y, endpoint.X - stpoint.X, endpoint.Y - stpoint.Y);

 

   Rectangle tempr = new Rectangle(rect1.X, rect1.Y, rect1.Width + 2, rect1.Height + 2);

   this .Invalidate(tempr);

  }

选择结束的处理代码.

?

private void Form1_MouseUp( object sender, MouseEventArgs e)

  {

   if (e.Button == MouseButtons.Left && Track_move== true )

   {

   Track_move = false ;

   endpoint = new Point(e.X, e.Y);

   rect1 = new Rectangle(stpoint.X, stpoint.Y, endpoint.X - stpoint.X, endpoint.Y - stpoint.Y);

   Rectangle rectorg = new Rectangle(borg.X, borg.Y, image1.Width, image1.Height);

   if (rect1.Width <= 0)

    return ;

   if (rect1.Height <= 0)

    return ;

   if (rectorg.Contains(rect1))

   {

    Rectangle rectadj = new Rectangle(rect1.X - borg.X, rect1.Y - borg.Y, rect1.Width, rect1.Height);

    Bitmap cropimge = image1.Clone(rectadj, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

    pictureBox2.Image = cropimge;

   }

   else

   {

    pictureBox2.Image = null ;

   }

   this .Invalidate();

  }

}

程序的整个代码

?

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.Runtime.InteropServices;

 

namespace imageForms

{

  static class Program

  {

  /// <summary>

  /// 应用程序的主入口点。

  /// </summary>

  [STAThread]

  static void Main()

  {

   Application.EnableVisualStyles();

   Application.SetCompatibleTextRenderingDefault( false );

   Application.Run( new Form1());

  }

  }

  public partial class Form1 : Form

  {

  private System.Windows.Forms.PictureBox pictureBox2;

  private System.Windows.Forms.Label label1;

  public Form1()

  {

   InitializeComponent();

  }

 

  private void pictureBox1_Click( object sender, EventArgs e)

  {

 

  }

 

  private void Form1_Load( object sender, EventArgs e)

  {

   showimg();

 

  }

  Bitmap image1;

  private void showimg()

  {

   int wd = 400;

   int hg = 200;

   int len = wd * hg * 3;

   byte [] pdata = new byte [len];

   for ( int i = 0; i < len; i++)

   {

   if (i > 3 * wd * (hg / 2))

   {

    pdata[i] = 255;

   }

   else

   {

    pdata[i] = 0;

   }

   }

 

   try

   {

   image1 = new Bitmap(wd, hg, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

   for ( int y = 0; y < hg; y++)

   {

    for ( int x = 0; x < wd; x++)

    {

    Color crr = Color.FromArgb(pdata[3 * wd * y + x], pdata[3 * wd * y + x], pdata[3 * wd * y + x]);

    image1.SetPixel(x, y, crr);

    }

   }

   // Set the PictureBox to display the image.

   // pictureBox1.Image = image1;

 

   }

   catch (ArgumentException)

   {

   MessageBox.Show( "There was an error check data." );

   }

  }

  Point stpoint,endpoint;

  Rectangle rect1;

  Point borg = new Point(20, 20);

  protected override void OnPaint(PaintEventArgs e)

  {

  

   base .OnPaint(e);

   e.Graphics.DrawImage(image1, borg);

   if (rect1 != null )

   {

    e.Graphics.DrawRectangle( new Pen(Color.Red, 1), rect1);

   }

  

  }

 

  private void Form1_MouseDown( object sender, MouseEventArgs e)

  {

   if (e.Button == MouseButtons.Left)

   {

   stpoint = new Point(e.X, e.Y);

   Track_move = true ;

   return ;

   }

   Track_move = false ;

  }

 

  private void Form1_MouseUp( object sender, MouseEventArgs e)

  {

   if (e.Button == MouseButtons.Left && Track_move== true )

   {

   Track_move = false ;

   endpoint = new Point(e.X, e.Y);

   rect1 = new Rectangle(stpoint.X, stpoint.Y, endpoint.X - stpoint.X, endpoint.Y - stpoint.Y);

   Rectangle rectorg = new Rectangle(borg.X, borg.Y, image1.Width, image1.Height);

   if (rect1.Width <= 0)

    return ;

   if (rect1.Height <= 0)

    return ;

   if (rectorg.Contains(rect1))

   {

    Rectangle rectadj = new Rectangle(rect1.X - borg.X, rect1.Y - borg.Y, rect1.Width, rect1.Height);

    Bitmap cropimge = image1.Clone(rectadj, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

    pictureBox2.Image = cropimge;

   }

   else

   {

    pictureBox2.Image = null ;

   }

   this .Invalidate();

   }

  }

  bool Track_move= false ;

  private void Form1_MouseMove( object sender, MouseEventArgs e)

  {

 

   if (Track_move)

   endpoint = new Point(e.X, e.Y);

   else

   {

   return ;

   }

   rect1 = new Rectangle(stpoint.X, stpoint.Y, endpoint.X - stpoint.X, endpoint.Y - stpoint.Y);

 

   Rectangle tempr = new Rectangle(rect1.X, rect1.Y, rect1.Width + 2, rect1.Height + 2);

   this .Invalidate(tempr);

  }

  private System.ComponentModel.IContainer components = null ;

 

  private void InitializeComponent()

  {

   this .pictureBox2 = new System.Windows.Forms.PictureBox();

   this .label1 = new System.Windows.Forms.Label();

   ((System.ComponentModel.ISupportInitialize)( this .pictureBox2)).BeginInit();

   this .SuspendLayout();

   //

   // pictureBox2

   //

   this .pictureBox2.Location = new System.Drawing.Point(605, 103);

   this .pictureBox2.Name = "pictureBox2" ;

   this .pictureBox2.Size = new System.Drawing.Size(227, 173);

   this .pictureBox2.TabIndex = 1;

   this .pictureBox2.TabStop = false ;

   //

   // label1

   //

   this .label1.AutoSize = true ;

   this .label1.Location = new System.Drawing.Point(602, 58);

   this .label1.Name = "label1" ;

   this .label1.Size = new System.Drawing.Size(127, 15);

   this .label1.TabIndex = 2;

   this .label1.Text = "鼠标左键选择裁剪" ;

   //

   // Form1

   //

   this .AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);

   this .AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

   this .ClientSize = new System.Drawing.Size(844, 558);

   this .Controls.Add( this .label1);

   this .Controls.Add( this .pictureBox2);

   this .Name = "Form1" ;

   this .Text = "Form1" ;

   this .Load += new System.EventHandler( this .Form1_Load);

   this .MouseUp += new System.Windows.Forms.MouseEventHandler( this .Form1_MouseUp);

   this .MouseDown += new System.Windows.Forms.MouseEventHandler( this .Form1_MouseDown);

   this .MouseMove += new System.Windows.Forms.MouseEventHandler( this .Form1_MouseMove);

   ((System.ComponentModel.ISupportInitialize)( this .pictureBox2)).EndInit();

   this .ResumeLayout( false );

   this .PerformLayout();

 

  }

  protected override void Dispose( bool disposing)

  {

   if (disposing && (components != null ))

   {

   components.Dispose();

   }

   base .Dispose(disposing);

  }

 

  }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/s8848/article/details/46286513

dy("nrwz");

查看更多关于C#实现鼠标裁剪图像功能的详细内容...

  阅读:43次