2017-04-22 78 views
-1

我想裁剪图像的底部25%,但我得到'内存不足'异常。我从我的代码和研究中测试知道,由于我的坐标超出范围,这个例外纯粹是抛出了。克隆,然后使用System.Drawing.Rectangle裁剪图像返回'内存不足'异常

我有一个叫做bmp的图片,它的宽度是400px,高度是250px。我用下面的代码修剪它...

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来完成此操作。

如果有人能指出我对这个问题的答案,那就太好了!

+0

从您的问题中不清楚您在通过超出范围的坐标时实际预期会发生什么,或者为何相关。缺乏良好的[mcve]会加剧这种缺乏清晰度的情况。但是,这听起来有点像你在错误的印象中位图坐标系统将原点放在图像的左下角。事实并非如此,并不适用于.NET上下文中的标准位图。原点在左上方,Y坐标向下增加。如果这还不足以让你重新走上正轨,你将需要相当大的改善你的问题。 –

回答

0

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

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

另外,请注意y轴的放置方式与传统几何体不同。这里y轴点“下”。

+0

x轴不会指向下方,它与正常情况相同。 y轴指向下方,在左上方有(0,0)的不可避免的副作用。矩形的右上角在(400,0)处。 –

+0

@HansPassant你绝对正确。我编辑了我的答案。 –