private Bitmap bt1;
private Bitmap bt2;
Point p1;
Point p2;
bool b = false;
Image img;
/// <summary>
/// 剪切图片的按钮
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
private void btnShear_Click(object sender, EventArgs e)
{
b = true;
} /// <summary>
/// 获取按下鼠标指针的坐标
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
private void pictureBox_MouseDown(object sender, MouseEventArgs e)
{
if (b)
{
this.Cursor = Cursors.Cross;
p1 = new Point(e.X, e.Y);
}
} /// <summary>
/// 记录鼠标的移动
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
private void pictureBox_MouseMove(object sender, MouseEventArgs e)
{
if (b)
{
if (this.Cursor == Cursors.Cross)
{
p2 = new Point(e.X, e.Y);
pictureBox.Refresh();
Pen p = new Pen(Color.White, 1);
p.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
Rectangle rect = new Rectangle(p1, new Size(p2.X - p1.X, p2.Y - p1.Y));
Graphics _Graphcis = Graphics.FromHwnd(pictureBox.Handle);
_Graphcis.DrawRectangle(p, rect);
_Graphcis.Dispose();
p.Dispose();
}
}
} /// <summary>
/// 获取松开鼠标时指针的坐标
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
private void pictureBox_MouseUp(object sender, MouseEventArgs e)
{
if (b)
{ this.Cursor = Cursors.Default;
p2 = new Point(e.X, e.Y);
CutImage();
pictureBox.Refresh();
b = false;
}
} /// <summary>
/// 剪切图片
/// </summary>
private void CutImage()
{
try
{
img = this.pictureBox.Image;
bt1 = new Bitmap(p2.X - p1.X, p2.Y - p1.Y);
Rectangle tgtRect = new Rectangle(0, 0, bt1.Width, bt1.Height);
Rectangle srcRect = new Rectangle(p1.X, p1.Y, bt1.Width, bt1.Height);
Graphics g = Graphics.FromImage(bt1);
g.DrawImage(img, tgtRect, srcRect, GraphicsUnit.Pixel);
this.pictureBox.Image = bt1; g.Dispose();
}
catch (Exception)
{ }
}
private Bitmap bt2;
Point p1;
Point p2;
bool b = false;
Image img;
/// <summary>
/// 剪切图片的按钮
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
private void btnShear_Click(object sender, EventArgs e)
{
b = true;
} /// <summary>
/// 获取按下鼠标指针的坐标
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
private void pictureBox_MouseDown(object sender, MouseEventArgs e)
{
if (b)
{
this.Cursor = Cursors.Cross;
p1 = new Point(e.X, e.Y);
}
} /// <summary>
/// 记录鼠标的移动
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
private void pictureBox_MouseMove(object sender, MouseEventArgs e)
{
if (b)
{
if (this.Cursor == Cursors.Cross)
{
p2 = new Point(e.X, e.Y);
pictureBox.Refresh();
Pen p = new Pen(Color.White, 1);
p.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
Rectangle rect = new Rectangle(p1, new Size(p2.X - p1.X, p2.Y - p1.Y));
Graphics _Graphcis = Graphics.FromHwnd(pictureBox.Handle);
_Graphcis.DrawRectangle(p, rect);
_Graphcis.Dispose();
p.Dispose();
}
}
} /// <summary>
/// 获取松开鼠标时指针的坐标
/// </summary>
/// <param name="sender"> </param>
/// <param name="e"> </param>
private void pictureBox_MouseUp(object sender, MouseEventArgs e)
{
if (b)
{ this.Cursor = Cursors.Default;
p2 = new Point(e.X, e.Y);
CutImage();
pictureBox.Refresh();
b = false;
}
} /// <summary>
/// 剪切图片
/// </summary>
private void CutImage()
{
try
{
img = this.pictureBox.Image;
bt1 = new Bitmap(p2.X - p1.X, p2.Y - p1.Y);
Rectangle tgtRect = new Rectangle(0, 0, bt1.Width, bt1.Height);
Rectangle srcRect = new Rectangle(p1.X, p1.Y, bt1.Width, bt1.Height);
Graphics g = Graphics.FromImage(bt1);
g.DrawImage(img, tgtRect, srcRect, GraphicsUnit.Pixel);
this.pictureBox.Image = bt1; g.Dispose();
}
catch (Exception)
{ }
}
解决方案 »
- 怎么实现点击一个按钮,弹出窗体,然后窗体在按钮旁边显示。
- 一个布局的小问题 100分
- 大家好,有做过物业关系系统的吗?
- 关于C# 文件存储的问题
- 请教些队列算法问题,请高手指点
- 窗体之间回调参数,有思路,却实现不了
- 在GridView中显示DataTime型的字符串
- C#在EXCEL里用Sheet.UsedRange.Find查找6位数的数据时该怎么作限制
- 为什么在web上放一个datagrid控键,在运行的时候看不到,请高人指点
- 小问题!xp专业版下要调试sqlserver的数据库,装什么版本的sqlserver??
- 无法循环向数据库里添加数据?帮我看看
- 用bitmap类绘图在火狐上显示为乱码?!
bitmap2 实际被剪切的图像,不会被修改
bitmap3 在这一层里先绘制bitmap2,再绘制bitmap1,然后赋值给pictureBox显示。 绘制的频率使用timer控制就可以。