Обрезка изображения в C # - PullRequest
       0

Обрезка изображения в C #

1 голос
/ 03 января 2012

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

Как найти расстояние между левой стороной элемента управления изображением и 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;
    }

1 Ответ

1 голос
/ 03 января 2012

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

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

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

...