QQ的截图功能非常实用,只要在图片上鼠标按住一拉,就可以实现区域截图。其实用.Net比较容易实现这种方法(C#)。
首先我们确定此功能的原理:
1:mousedown事件中记录下起始位置,并且描绘一个虚线边框。 2:mouseup事件中记录下结束位置 3:于是得到一个矩形区域, 4:在目标对象中,DrawImage,其中source为第一个picturebox的图像,起始点,宽度高度换算下.
首先放置两个个图片框pictureBox1和pictureBox2。
private int _x, _y; Image _img = null; private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { _img = pictureBox1.Image.Clone() as Image; _x = e.X; _y = e.Y;
}
sender, MouseEventArgs e) { int sx = _x < e.X ? _x : e.X; ? _y : e.Y; = Math.Abs(_x - e.X); - e.Y); Bitmap bmp Bitmap(w, h); Graphics g = Graphics.FromImage(bmp); g.DrawImage(pictureBox1.Image, 0, 0, w, h), sx, sy, w, h, GraphicsUnit.Pixel); g.Save(); pictureBox2.Image = bmp; bmp.Save("c:\\" + DateTime.Now.Ticks.ToString() + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg); }
sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { Pen p 1); p.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; Graphics g = Graphics.FromHwnd(pictureBox1.Handle); < e.X ? _x : e.X; ? _y : e.Y; - e.X); - e.Y); pictureBox1.Image = _img; g.DrawRectangle(p, sx, sy, w, h); } }int h = Math.Abs(_y int w = Math.Abs(_x int sy = _y < e.Y int sx = _x = new Pen(Color.Red, private void pictureBox1_MouseMove(objectnew Rectangle(= newint h = Math.Abs(_y int w int sy = _y < e.Y private void pictureBox1_MouseUp(object
此段代码实现的截图功能算是比较完善,在拖拽鼠标时,会有一个虚线框方便划分区域。同时,截图可以保存为jpeg格式的图片。
(责任编辑:admin) |