需要使用Windows API HDC GetDC( HWND hWnd // handle to window ); COLORREF GetPixel( HDC hdc, // handle to DC int nXPos, // x-coordinate of pixel int nYPos // y-coordinate of pixel ); COLORREF SetPixel( HDC hdc, // handle to DC int X, // x-coordinate of pixel int Y, // y-coordinate of pixel COLORREF crColor // pixel color );先取出你鼠标选中区域的所有像素的颜色,然后重新画出来在保存一下!
GDI+可以遍历每一个像素的颜色。 不太明白lz的问题描述。是用4个点连成一个框再截图吗?
以下代码的功能 :点鼠标左键在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; } private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { int sx = _x < e.X ? _x : e.X; int sy = _y < e.Y ? _y : e.Y; int w = Math.Abs(_x - e.X); int h = Math.Abs(_y - e.Y); Graphics g = Graphics.FromHwnd(pictureBox2.Handle); g.Clear(pictureBox2.BackColor); g.DrawImage(pictureBox1.Image, new Rectangle(0, 0, w, h), sx, sy, w, h, GraphicsUnit.Pixel); } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { Pen p = new Pen(Color.Blue,1); p.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; Graphics g = Graphics.FromHwnd(pictureBox1.Handle); int sx = _x < e.X ? _x : e.X; int sy = _y < e.Y ? _y : e.Y; int w = Math.Abs(_x - e.X); int h = Math.Abs(_y - e.Y); pictureBox1.Image = _img; g.DrawRectangle(p, sx, sy, w, h); } }
先在Panel上把图像画出来,然后再设定MouseClick事件或者自己输入坐标,
根据坐标围成的闭合曲线,把图像的那个区域的内存数据保存出来,然后再用MemoryStream创建一个新的图像,并保存成文件
就可以实现你的东西了以前我还做过一个就是矢量跟踪的,那个需要你用鼠标去画,把点都保存成矩阵数据,就能取得一个完整边框数据
参考
http://blog.csdn.net/JoeBlackzqq/archive/2008/01/16/2047592.aspx
http://blog.csdn.net/eversoutheast/archive/2008/02/25/2119994.aspx
http://www.cnblogs.com/strinkbug/archive/2007/02/15/651212.html
先在Panel上把图像画出来,然后再设定MouseClick事件或者自己输入坐标,
根据坐标围成的闭合曲线,把图像的那个区域的内存数据保存出来,然后再用MemoryStream创建一个新的图像,并保存成文件
就可以实现你的东西了 以前我还做过一个就是矢量跟踪的,那个需要你用鼠标去画,把点都保存成矩阵数据,就能取得一个完整边框数据
----------------
可用!
先在Panel上把图像画出来,然后再设定MouseClick事件或者自己输入坐标,
根据坐标围成的闭合曲线,把图像的那个区域的内存数据保存出来,然后再用MemoryStream创建一个新的图像,并保存成文件
就可以实现你的东西了 以前我还做过一个就是矢量跟踪的,那个需要你用鼠标去画,把点都保存成矩阵数据,就能取得一个完整边框数据
HDC GetDC(
HWND hWnd // handle to window
);
COLORREF GetPixel(
HDC hdc, // handle to DC
int nXPos, // x-coordinate of pixel
int nYPos // y-coordinate of pixel
);
COLORREF SetPixel(
HDC hdc, // handle to DC
int X, // x-coordinate of pixel
int Y, // y-coordinate of pixel
COLORREF crColor // pixel color
);先取出你鼠标选中区域的所有像素的颜色,然后重新画出来在保存一下!
不太明白lz的问题描述。是用4个点连成一个框再截图吗?
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;
} private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
int sx = _x < e.X ? _x : e.X;
int sy = _y < e.Y ? _y : e.Y;
int w = Math.Abs(_x - e.X);
int h = Math.Abs(_y - e.Y);
Graphics g = Graphics.FromHwnd(pictureBox2.Handle);
g.Clear(pictureBox2.BackColor);
g.DrawImage(pictureBox1.Image, new Rectangle(0, 0, w, h), sx, sy, w, h, GraphicsUnit.Pixel); } private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Pen p = new Pen(Color.Blue,1);
p.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
Graphics g = Graphics.FromHwnd(pictureBox1.Handle);
int sx = _x < e.X ? _x : e.X;
int sy = _y < e.Y ? _y : e.Y;
int w = Math.Abs(_x - e.X);
int h = Math.Abs(_y - e.Y);
pictureBox1.Image = _img;
g.DrawRectangle(p, sx, sy, w, h);
} }