C# 截取图片问题(急急急急急急!~)

时间:2021-06-14 00:58:32
C# 截取图片问题(急急急急急急!~)

这是正常的选中截取图片。
但是如果直接将矩形框拉到最大: C# 截取图片问题(急急急急急急!~)
就会报这个错误。
求个大神来解释一下。

21 个解决方案

#1


妹子好凶啊

你矩形框代码是怎么操作的,一直都在消耗大量的内存?

#2


引用 1 楼 vb763305825 的回复:
妹子好凶啊

你矩形框代码是怎么操作的,一直都在消耗大量的内存?
C# 截取图片问题(急急急急急急!~)

松开鼠标的时候  就将矩形覆盖的图片位置  传到右边的2个小一点pictureBox中

#3


矩形里面的图片都是实时画上去的? 鼠标拖拽到时候一秒钟画多少遍?

#4


引用 3 楼 vb763305825 的回复:
矩形里面的图片都是实时画上去的? 鼠标拖拽到时候一秒钟画多少遍?

就是上传一张图片。
然后在pictureBox中间弄一个矩形。
然后矩形中间截取的图片提取出来。

如果将截取图片的矩形直接拉到最大。 他就会报错。

#5


看看你拉矩形的操作是怎么做的

#6


引用 5 楼 vb763305825 的回复:
看看你拉矩形的操作是怎么做的
 //拖动截取区域的方法
        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


楼上正解 C# 截取图片问题(急急急急急急!~)

#8


你这个方法是鼠标移动的时候都一直在调用?

#9


引用 7 楼 tr127 的回复:
楼上正解 C# 截取图片问题(急急急急急急!~)


这是楼主我自己的代码。。

#10


引用 8 楼 vb763305825 的回复:
你这个方法是鼠标移动的时候都一直在调用?



引用 8 楼 vb763305825 的回复:
你这个方法是鼠标移动的时候都一直在调用?

第一个方法是让我能拖动矩形。
第二个方法是拖动矩形的时候  不会超过pictureBox

#11


引用 8 楼 vb763305825 的回复:
你这个方法是鼠标移动的时候都一直在调用?

第一个方法是能拖动矩形和拉伸矩形

#12


哥,能正面回答不 C# 截取图片问题(急急急急急急!~)

#13


引用 12 楼 vb763305825 的回复:
哥,能正面回答不 C# 截取图片问题(急急急急急急!~)

哥。。 我也没有弄得太明白,,
这是从网上找的代码。

你感觉是那里错了。?

#14


我是问你在哪、什么时候、调了多少次这个方法 C# 截取图片问题(急急急急急急!~)

#15


引用 14 楼 vb763305825 的回复:
我是问你在哪、什么时候、调了多少次这个方法 C# 截取图片问题(急急急急急急!~)

对   都是在鼠标事件里面调用

#16


别跟我说是MouseMove事件,你是画一个矩形还是在PicBox上面添加个Panel把图片截下来再不断地画在Panel上面保持更新? C# 截取图片问题(急急急急急急!~)

#17


引用 16 楼 vb763305825 的回复:
别跟我说是MouseMove事件,你是画一个矩形还是在PicBox上面添加个Panel把图片截下来再不断地画在Panel上面保持更新? C# 截取图片问题(急急急急急急!~)
C# 截取图片问题(急急急急急急!~)
画的一个矩形。

#18


C# 截取图片问题(急急急急急急!~)
求大神解决啊

#19


引用 16 楼 vb763305825 的回复:
别跟我说是MouseMove事件,你是画一个矩形还是在PicBox上面添加个Panel把图片截下来再不断地画在Panel上面保持更新? C# 截取图片问题(急急急急急急!~)


C# 截取图片问题(急急急急急急!~)
大哥。 我解决了。。
应该是截取的矩形边框超过的控件的大小。
让他出现的这个错误。

#20


看你的代码不是有判断截取矩形边框是否超过控件大小么? C# 截取图片问题(急急急急急急!~)

#21


引用 20 楼 vb763305825 的回复:
看你的代码不是有判断截取矩形边框是否超过控件大小么? C# 截取图片问题(急急急急急急!~)

好像是那个拉伸的点  过了边框。
反正我就重新设置了一下  就好了

#1


妹子好凶啊

你矩形框代码是怎么操作的,一直都在消耗大量的内存?

#2


引用 1 楼 vb763305825 的回复:
妹子好凶啊

你矩形框代码是怎么操作的,一直都在消耗大量的内存?
C# 截取图片问题(急急急急急急!~)

松开鼠标的时候  就将矩形覆盖的图片位置  传到右边的2个小一点pictureBox中

#3


矩形里面的图片都是实时画上去的? 鼠标拖拽到时候一秒钟画多少遍?

#4


引用 3 楼 vb763305825 的回复:
矩形里面的图片都是实时画上去的? 鼠标拖拽到时候一秒钟画多少遍?

就是上传一张图片。
然后在pictureBox中间弄一个矩形。
然后矩形中间截取的图片提取出来。

如果将截取图片的矩形直接拉到最大。 他就会报错。

#5


看看你拉矩形的操作是怎么做的

#6


引用 5 楼 vb763305825 的回复:
看看你拉矩形的操作是怎么做的
 //拖动截取区域的方法
        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


楼上正解 C# 截取图片问题(急急急急急急!~)

#8


你这个方法是鼠标移动的时候都一直在调用?

#9


引用 7 楼 tr127 的回复:
楼上正解 C# 截取图片问题(急急急急急急!~)


这是楼主我自己的代码。。

#10


引用 8 楼 vb763305825 的回复:
你这个方法是鼠标移动的时候都一直在调用?



引用 8 楼 vb763305825 的回复:
你这个方法是鼠标移动的时候都一直在调用?

第一个方法是让我能拖动矩形。
第二个方法是拖动矩形的时候  不会超过pictureBox

#11


引用 8 楼 vb763305825 的回复:
你这个方法是鼠标移动的时候都一直在调用?

第一个方法是能拖动矩形和拉伸矩形

#12


哥,能正面回答不 C# 截取图片问题(急急急急急急!~)

#13


引用 12 楼 vb763305825 的回复:
哥,能正面回答不 C# 截取图片问题(急急急急急急!~)

哥。。 我也没有弄得太明白,,
这是从网上找的代码。

你感觉是那里错了。?

#14


我是问你在哪、什么时候、调了多少次这个方法 C# 截取图片问题(急急急急急急!~)

#15


引用 14 楼 vb763305825 的回复:
我是问你在哪、什么时候、调了多少次这个方法 C# 截取图片问题(急急急急急急!~)

对   都是在鼠标事件里面调用

#16


别跟我说是MouseMove事件,你是画一个矩形还是在PicBox上面添加个Panel把图片截下来再不断地画在Panel上面保持更新? C# 截取图片问题(急急急急急急!~)

#17


引用 16 楼 vb763305825 的回复:
别跟我说是MouseMove事件,你是画一个矩形还是在PicBox上面添加个Panel把图片截下来再不断地画在Panel上面保持更新? C# 截取图片问题(急急急急急急!~)
C# 截取图片问题(急急急急急急!~)
画的一个矩形。

#18


C# 截取图片问题(急急急急急急!~)
求大神解决啊

#19


引用 16 楼 vb763305825 的回复:
别跟我说是MouseMove事件,你是画一个矩形还是在PicBox上面添加个Panel把图片截下来再不断地画在Panel上面保持更新? C# 截取图片问题(急急急急急急!~)


C# 截取图片问题(急急急急急急!~)
大哥。 我解决了。。
应该是截取的矩形边框超过的控件的大小。
让他出现的这个错误。

#20


看你的代码不是有判断截取矩形边框是否超过控件大小么? C# 截取图片问题(急急急急急急!~)

#21


引用 20 楼 vb763305825 的回复:
看你的代码不是有判断截取矩形边框是否超过控件大小么? C# 截取图片问题(急急急急急急!~)

好像是那个拉伸的点  过了边框。
反正我就重新设置了一下  就好了