Я использую 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;
}
«расстояние между левой стороной управления изображением и реальная левая сторона фактического изображения» - не могли бы вы объяснить или опубликовать изображение, объясняющее, что вы пытаетесь выполнить? –
Правильный способ сделать это состоял в том, чтобы поддерживать размер PictureBox равным отображаемому изображению. Размер PictureBox динамически вычисляется с использованием ответа, предоставленного @InBetween – kayz1