2012-05-07 7 views
1

스트림에서 이미지 작업을하려면 다음 코드가 필요합니다. 내 의도는 그것의 하위 영역을 선택하고 100x100로 크기를 조정하는 것입니다. 나는 이미지의 형식을 미리 모른다. 어떤 이유 이미지 클리핑

var image = new Bitmap(stream); 

var destArea = new Rectangle(0, 0, 100, 100); 
var srcArea = new Rectangle(x, y, width, height); 

var gfx = Graphics.FromImage(image); 
gfx.DrawImage(image, destArea, srcArea, GraphicsUnit.Pixel); 

var ms = new MemoryStream(); 
image.Save(ms, image.RawFormat); 

,이 결과는 원래 내 원하는 결과의 혼합물이되도록, 크기를 조정하고 원본 이미지의 상단에 넣어, 내가 원하는 부분 영역을하고있다.

나는 이미지 처리에 관한 몇 가지 가이드와 게시물을 보았지만, 나는 틀린 부분을 확실히 모른다. 나 좀 도와 줄래?

또한 내가 실종되었다는 것을 나에게 설명해 주시면 감사하겠습니다. (코드 뒤에 약간의 이론이 있습니다).

감사합니다.

답변

1

이미지 크기를 조정하려면 크기가 조정 된 이미지를 넣을 새 이미지 개체가 필요합니다. 누락 된 부분은 새로운 100x100 이미지를 만드는 것입니다. 여기에 코드가 보일 것입니다 방법은 다음과 같습니다 그들은 일반적으로 가비지 컬렉션과 잘 재생되지 않는

var image = new Bitmap(stream); 
var destArea = new Rectangle(0, 0, 100, 100); 
var srcArea = new Rectangle(x, y, width, height); 

// Destination image 
var destImage = new Bitmap(destArea.Width, destArea.Height); 

var gfx = Graphics.FromImage(destImage); 
gfx.DrawImage(image, destArea, srcArea, GraphicsUnit.Pixel); 

var ms = new MemoryStream(); 
destImage.Save(ms, image.RawFormat); 

는 또한, using 문에서 모든 GDI + 개체를 포장 추천 할 것입니다.

+0

고맙습니다. 나는 다른 매개 변수의 의미 (예를 들어, 왜 gfx가 destimage에서 생성되었지만 이미지를 그립니다)에 대해 혼란스러워합니다. 나는 더 깊은 문서로 갈 필요가있다. 감사! – Alpha

+1

걱정할 필요가 없습니다. gfx는 대상 이미지에 페인트하는 객체이므로 DrawImage (image, ...)를 호출하면 이미지의 내용을 destImage에 페인팅합니다. –