使用 System.Drawing.Rectangle returns 'out of memory' 异常克隆然后裁剪图像

Cloning and then cropping an image using System.Drawing.Rectangle returns 'out of memory' exception

我正在尝试裁剪图像底部的 25%,但出现 'out of memory' 异常。我从我的代码测试和研究中得知,这个异常纯粹是由于我的坐标超出范围而引发的。

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

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

这给了我:'Exception Details: System.OutOfMemoryException: Out of memory.'

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

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

我的图片是从左上角向下裁剪的(即我得到了前 25%),这对我来说毫无意义,因为我肯定需要将高度设置为 -62 而不是 62 才能做到这一点.

如果有人能指出我的答案,那就太棒了!

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

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

此外,请注意 y 轴的放置方式与经典几何不同。这里y轴指向"down".