2012-02-28 7 views
3

가로 세로 비율을 변경하지 않고 이미지를 자르기해야합니다. 나는 EDSDK를 사용하여 CANON1100D에서 사진을 찍고있다. 캡처 된 이미지 : 폭 = 1920높이 = 1280
화면 배급이 1.5입니다. 하지만 가로 세로 비율이 1.33 인 그림이 필요합니다.
가로 세로 비율을 변경하지 않고 이미지 자르기 방법


// convert into processing resolution (1600,1200) 

Image<Bgr, byte> runtime_frm = new Image<Bgr, byte>(frame.ToBitmap(1600,1200)); 

// also in bitmap processing 

// Bitmap a = new Bitmap(runtime_frm.ToBitmap()); 
// Bitmap b = new Bitmap(a, new Size(1600,1200)); 

이미지의 종횡비가 변경되지만 이미지에 스트레스가 생길 수 있도록 이미지의 크기가 조정됩니다. 런타임에 이미지 (1920x1280)를 (1600x1200)으로 잘라야합니다.

프로그래밍 방식으로 어떻게 할 수 있습니까? 어떤 생각이든

+1

귀하의 조건을 올바르게 읽었는지 확실하지 않습니다. 종횡비를 1 : 1.5에서 1 : 1.333으로 변경해야하지만 종횡비는 변경하지 않아야합니다. –

+0

저는 종횡비 1 : 1.5 –

답변

3
public void Crop(Bitmap bm, int cropX, int cropY,int cropWidth,int cropHeight) 
{ 
     var rect = new System.Drawing.Rectangle(cropX,cropY,cropWidth,cropHeight); 

     Bitmap newBm = bm.Clone(rect, bm.PixelFormat); 

     newBm.Save("image2.jpg"); 
} 

어쩌면 그렇게 될 수 있을까요?

source

+0

의 원래 이미지에서 종횡비 1 : 1.33 인 이미지의 일부를 ** crop **해야합니다 cropX, cropY 매개 변수를 설명 하시겠습니까? –

+0

cropX 및 cropY는 이미지 자르기에 사용되는 사각형의 원점입니다. – TomP89

+1

자르기를 시작할 위치입니다. x = 0 및 y = 0은 왼쪽 상단에서 시작해야합니다. 이미지의 한 점. –

2

이 중심 자르기 내 솔루션입니다.


Bitmap CenterCrop(Bitmap srcImage, int newWidth, int newHeight) 
{ 
    Bitmap ret = null; 

    int w = srcImage.Width; 
    int h = srcImage.Height; 

    if (w < newWidth || h < newHeight) 
    { 
      MessageBox.Show("Out of boundary"); 
      return ret; 
    } 

    int posX_for_centerd_crop = (w - newWidth)/2; 
    int posY_for_centerd_crop = (h - newHeight)/2; 

    var CenteredRect = new Rectangle(posX_for_centerd_crop, 
          posY_for_centerd_crop, newWidth, newHeight); 

    ret = srcImage.Clone(imageCenterRect, srcImage.PixelFormat); 

    return ret; 
} 
관련 문제