2012-01-03 6 views
1

이미지 표시에 PictureBox을 사용하고 있습니다. 해상도가 4000 * 4000까지입니다. 내 디스플레이 영역이 훨씬 작기 때문에 가로 세로 비를 유지하려면 pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;으로 이미지를 표시해야합니다. 그 후 이미지가 화면 중간에 있습니다.C에서 이미지 자르기

이미지 컨트롤의 왼쪽과 실제 이미지 왼쪽의 REAL 사이의 거리를 찾으려면 어떻게해야합니까? (아래 이미지 참조).

해결책이 있습니까?

btw. 화면의 왼쪽에 이미지를 표시하는 것도 트릭을 할 것입니다.

 var imageHeight = pictureBox1.Image.Height; 
     var imageWidth = pictureBox1.Image.Width; 
     var userSelection = rect.Rect; 

     var display = pictureBox1.DisplayRectangle; 
     var xFactor = (float)userSelection.Width/display.Width; 
     var yFactor = (float)userSelection.Height/display.Height; 

     var realCropSizeWidth = xFactor * imageWidth; 
     var realCropSizeHight = yFactor * imageHeight; 

     var realCropX = imageWidth/display.Width; 
     realCropX *= userSelection.X; 
     var realCropY = imageHeight/display.Height; 
     realCropY *= userSelection.Y; 

     var realCropRectangle = new Rectangle(realCropX, realCropY, (int)realCropSizeWidth, 
               (int)realCropSizeHight); 

     var image = CropImage(pictureBox1.Image, realCropRectangle); 
     pictureBox1.Image = image; 

     public Image CropImage(Image source, Rectangle rectangle) 
    { 
     var target = new Bitmap(rectangle.Width, rectangle.Height); 
     using (var g = Graphics.FromImage(target)) 
     { 
      g.DrawImage(source, new Rectangle(0, 0, target.Width, target.Height), 
          rectangle, 
          GraphicsUnit.Pixel); 
     } 
     return target; 
    } 
+0

"이미지 컨트롤의 왼쪽면과 실제 이미지의 왼쪽면 사이의 거리"- 수행하려는 것을 설명하는 그림을 설명하거나 게시 할 수 있습니까? –

+0

이 작업을 수행하는 올바른 방법은 PictureBox의 크기를 표시된 이미지와 동일하게 유지하는 것입니다. PictureBox 크기는 @InBetween에서 제공 한 대답을 사용하여 동적으로 계산됩니다. – kayz1

답변

1

지금까지 내가 당신이 원하는 것을 얻기의 직접적인 방법이 없습니다 알고 있지만, 몇 가지 간단한 수학이 충분 같이

당신은 보존하여 원본 이미지의 가로 세로 비율을 알고 당신이 알고 당신이 그것을 보여주고있는 당신의 picturebox의 종횡비. 이를 기반으로 이미지가 정확히 맞는 크기 (높이 또는 너비)를 파악할 수 있습니다. 일단 당신이 당신이 이미지의 스케일링 요소를 얻을 수 있다는 것을 알게되면 이미지의 다른 차원을 계산할 수 있습니다.

이미지가 그림 상자에 정확히 맞지 않는 치수의 가운데에 표시되므로 이미지를 찾는 거리가 멀어 지므로 거리가 멀어집니다.