这是正常的选中截取图片。
但是如果直接将矩形框拉到最大:
就会报这个错误。
求个大神来解释一下。
21 个解决方案
#1
妹子好凶啊
你矩形框代码是怎么操作的,一直都在消耗大量的内存?
你矩形框代码是怎么操作的,一直都在消耗大量的内存?
#2
松开鼠标的时候 就将矩形覆盖的图片位置 传到右边的2个小一点pictureBox中
#3
矩形里面的图片都是实时画上去的? 鼠标拖拽到时候一秒钟画多少遍?
#4
就是上传一张图片。
然后在pictureBox中间弄一个矩形。
然后矩形中间截取的图片提取出来。
如果将截取图片的矩形直接拉到最大。 他就会报错。
#5
看看你拉矩形的操作是怎么做的
#6
//拖动截取区域的方法
private void ChangeSelctImageRect(Point point)
{
Rectangle rect = _selectImageBounds;
int left = rect.Left;
int top = rect.Top;
int right = rect.Right;
int bottom = rect.Bottom;
bool sizeGripAll = false;
switch (_sizeGrip)
{
case SizeGrip.All:
rect.Offset(
point.X - _mouseDownPoint.X, point.Y - _mouseDownPoint.Y);
sizeGripAll = true;
break;
case SizeGrip.TopLeft:
left = point.X;
top = point.Y;
break;
case SizeGrip.TopRight:
right = point.X;
top = point.Y;
break;
case SizeGrip.BottomLeft:
case SizeGrip.Left:
left = point.X;
bottom = point.Y;
break;
case SizeGrip.BottomRight:
case SizeGrip.Right:
case SizeGrip.Bottom:
right = point.X;
bottom = point.Y;
break;
case SizeGrip.Top:
right = point.X;
top = point.Y;
break;
}
if (!sizeGripAll)
{
rect.X = left;
rect.Y = top;
rect.Width = right - left;
rect.Height = bottom - top;
}
_mouseDownPoint = point;
_selectImageBounds = rect;
SelectImageRect = ImageBoundsToRect(rect);
}
//计算截取矩形的边线
private Rectangle ImageBoundsToRect(Rectangle bounds)
{
Rectangle rect = bounds;
int x = 0;
int y = 0;
x = Math.Min(rect.X, rect.Right);
y = Math.Min(rect.Y, rect.Bottom);
rect.X = x;
rect.Y = y;
int rWidth = 0;
int rHeight = 0;
rWidth = Math.Max(1, Math.Abs(rect.Width));
rHeight = Math.Max(1, Math.Abs(rect.Height));
rect.Width = rect.Height = Math.Max(rWidth, rHeight);
return rect;
}
#7
楼上正解
#8
你这个方法是鼠标移动的时候都一直在调用?
#9
这是楼主我自己的代码。。
#10
第一个方法是让我能拖动矩形。
第二个方法是拖动矩形的时候 不会超过pictureBox
#11
第一个方法是能拖动矩形和拉伸矩形
#12
哥,能正面回答不
#13
哥。。 我也没有弄得太明白,,
这是从网上找的代码。
你感觉是那里错了。?
#14
我是问你在哪、什么时候、调了多少次这个方法
#15
对 都是在鼠标事件里面调用
#16
别跟我说是MouseMove事件,你是画一个矩形还是在PicBox上面添加个Panel把图片截下来再不断地画在Panel上面保持更新?
#17
画的一个矩形。
#18
求大神解决啊
#19
大哥。 我解决了。。
应该是截取的矩形边框超过的控件的大小。
让他出现的这个错误。
#20
看你的代码不是有判断截取矩形边框是否超过控件大小么?
#21
好像是那个拉伸的点 过了边框。
反正我就重新设置了一下 就好了
#1
妹子好凶啊
你矩形框代码是怎么操作的,一直都在消耗大量的内存?
你矩形框代码是怎么操作的,一直都在消耗大量的内存?
#2
松开鼠标的时候 就将矩形覆盖的图片位置 传到右边的2个小一点pictureBox中
#3
矩形里面的图片都是实时画上去的? 鼠标拖拽到时候一秒钟画多少遍?
#4
就是上传一张图片。
然后在pictureBox中间弄一个矩形。
然后矩形中间截取的图片提取出来。
如果将截取图片的矩形直接拉到最大。 他就会报错。
#5
看看你拉矩形的操作是怎么做的
#6
//拖动截取区域的方法
private void ChangeSelctImageRect(Point point)
{
Rectangle rect = _selectImageBounds;
int left = rect.Left;
int top = rect.Top;
int right = rect.Right;
int bottom = rect.Bottom;
bool sizeGripAll = false;
switch (_sizeGrip)
{
case SizeGrip.All:
rect.Offset(
point.X - _mouseDownPoint.X, point.Y - _mouseDownPoint.Y);
sizeGripAll = true;
break;
case SizeGrip.TopLeft:
left = point.X;
top = point.Y;
break;
case SizeGrip.TopRight:
right = point.X;
top = point.Y;
break;
case SizeGrip.BottomLeft:
case SizeGrip.Left:
left = point.X;
bottom = point.Y;
break;
case SizeGrip.BottomRight:
case SizeGrip.Right:
case SizeGrip.Bottom:
right = point.X;
bottom = point.Y;
break;
case SizeGrip.Top:
right = point.X;
top = point.Y;
break;
}
if (!sizeGripAll)
{
rect.X = left;
rect.Y = top;
rect.Width = right - left;
rect.Height = bottom - top;
}
_mouseDownPoint = point;
_selectImageBounds = rect;
SelectImageRect = ImageBoundsToRect(rect);
}
//计算截取矩形的边线
private Rectangle ImageBoundsToRect(Rectangle bounds)
{
Rectangle rect = bounds;
int x = 0;
int y = 0;
x = Math.Min(rect.X, rect.Right);
y = Math.Min(rect.Y, rect.Bottom);
rect.X = x;
rect.Y = y;
int rWidth = 0;
int rHeight = 0;
rWidth = Math.Max(1, Math.Abs(rect.Width));
rHeight = Math.Max(1, Math.Abs(rect.Height));
rect.Width = rect.Height = Math.Max(rWidth, rHeight);
return rect;
}
#7
楼上正解
#8
你这个方法是鼠标移动的时候都一直在调用?
#9
这是楼主我自己的代码。。
#10
第一个方法是让我能拖动矩形。
第二个方法是拖动矩形的时候 不会超过pictureBox
#11
第一个方法是能拖动矩形和拉伸矩形
#12
哥,能正面回答不
#13
哥。。 我也没有弄得太明白,,
这是从网上找的代码。
你感觉是那里错了。?
#14
我是问你在哪、什么时候、调了多少次这个方法
#15
对 都是在鼠标事件里面调用
#16
别跟我说是MouseMove事件,你是画一个矩形还是在PicBox上面添加个Panel把图片截下来再不断地画在Panel上面保持更新?
#17
画的一个矩形。
#18
求大神解决啊
#19
大哥。 我解决了。。
应该是截取的矩形边框超过的控件的大小。
让他出现的这个错误。
#20
看你的代码不是有判断截取矩形边框是否超过控件大小么?
#21
好像是那个拉伸的点 过了边框。
反正我就重新设置了一下 就好了