2012-01-03 3 views
1

Я использую PictureBox для отображения изображений. Мои изображения прямо из сканера, поэтому разрешение составляет до 4000 * 4000 ... Поскольку моя область отображения намного меньше, мне нужно отображать изображение с pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;, чтобы сохранить соотношение сторон. После этого изображение находится посередине экрана.Изображение обрезки в C#

Как найти расстояние между левой стороной управления изображением и REAL с левой стороны от фактического изображения (см. Изображение ниже).

Есть ли решение?

КПП. отображение изображения в левой части экрана тоже могло бы сделать трюк.

 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

Насколько я знаю, нет никакого прямого способа получить то, что вы хотите, но некоторая простая математика будет достаточно:

Вы знаете, соотношение сторон исходного изображения, которое сохраняется, и вы знаете, соотношение сторон вашего изображения, в котором вы показываете его. Исходя из этого, вы можете определить, какое измерение (высота или ширина) соответствует изображению. Как только вы знаете, что вы можете получить коэффициент масштабирования изображения, и поэтому вы можете рассчитать другое измерение отображаемого изображения.

Поскольку изображение будет центрировано по размеру, которое не точно соответствует изображению, его прогиб, чтобы получить расстояние, которое вы ищете.

Смежные вопросы