使用System.Drawing.Rectangle克隆然后裁剪图像会返回内存不足的情况。例外

时间:2017-04-22 21:47:39

标签: c# bitmap system.drawing

我正在尝试裁剪图片的底部25%,但我得到的是“内存不足”。例外。我从我的代码和研究中的测试中知道,由于我的坐标超出范围,这个异常纯粹被抛出。

我有一个名为bmp的图像,宽度为400像素,高度为250像素。我正在使用以下代码裁剪它......

PixelFormat = bmp.PixelFormat;
Bitmap CroppedImage = bmp.Clone(new System.Drawing.Rectangle(0, 250, 400, 62), bmpFormat);

这给了我:'异常细节:System.OutOfMemoryException:内存不足。'

但是,如果我的代码是写的......

PixelFormat = bmp.PixelFormat;
Bitmap CroppedImage = bmp.Clone(new System.Drawing.Rectangle(0, 0, 400, 62), bmpFormat);

我的图像从左上方向下裁剪(即我得到前25%)对我来说这对我没有任何意义,因为我确实需要将高度设置为-62而不是62来执行此操作。< / p>

如果有人能指出我对此的回答那就太棒了!

1 个答案:

答案 0 :(得分:0)

请记住Rectangle的构造函数中的前两个参数是矩形左上角的坐标。这使得矩形的右上角在(650, 0)处于第一个示例中的图像400宽度上。因此例外。

在您的第二个示例中,矩形沿其宽度覆盖原始图像,但其高度仅为62像素 - 因此您只能看到图像的上半部分被裁剪。

另请注意,y轴的放置方式与经典几何图形不同。这里y轴指向“向下”。