2017-04-22 54 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你絕對正確。我編輯了我的答案。 –