2017-04-22 9 views
-1

이미지의 하단 25 %을 잘라내려고하지만 '메모리 부족'예외가 발생합니다. 내 코드와 리서치를 테스트 한 결과,이 예외는 내 좌표가 범위를 벗어남으로써 순전히 던져지고 있음을 알 수 있습니다.복제 후 System.Drawing.Rectangle을 사용하여 이미지를 자르면 '메모리 부족'예외가 발생합니다.

나는 폭이 400px이고 높이가 250px 인 bmp라는 이미지가 있습니다. 나는

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 당신은 틀리지 않아요. 나는 내 대답을 편집했다. –