首页 > 编程 > C# > 正文

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

2020-01-24 00:11:26
字体:
来源:转载
供稿:网友

本文实例为大家分享了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); } }}

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表