Как вырезать прямоугольник из tiff?

У меня есть графический интерфейс Winforms на С#, который позволяет пользователю рисовать прямоугольник на дисплее tiff и сохранять положение, высоту, ширину и т. д. В основном, я хочу сделать сохраненную позицию, высоту и ширину прямоугольника и закрепите эту область в sep. растровое изображение, которое затем можно передать в sep. метод, который просто распознает новый клип растрового изображения. Как лучше всего это сделать?


person etoisarobot    schedule 08.03.2010    source источник


Ответы (2)


Используйте Graphics.DrawImage(), чтобы скопировать выделенную часть исходного изображения. Вам понадобится перегрузка, которая принимает исходный и конечный прямоугольники. . Создайте экземпляр Graphics из Graphics.FromImage() на новом растровом изображении того же размера, что и прямоугольник.

    public static Bitmap CropImage(Image source, Rectangle crop) {
        var bmp = new Bitmap(crop.Width, crop.Height);
        using (var gr = Graphics.FromImage(bmp)) {
            gr.DrawImage(source, new Rectangle(0, 0, bmp.Width, bmp.Height), crop, GraphicsUnit.Pixel);
        }
        return bmp;
    }
person Hans Passant    schedule 08.03.2010
comment
Также убедитесь, что вы управляете прямоугольником кадрирования в относительных процентах, а не в абсолютных значениях, если вы масштабируете отображение исходного изображения. - person Jacob G; 09.03.2010

Используйте Bitmap.Clone() для создания копия обрезанного региона.

public Bitmap ClipBitmap(Bitmap src, Rectangle crop)
{
  return src.Clone(crop, src.PixelFormat);
}
person Tarsier    schedule 17.03.2010