Я пытаюсь обрезать портретное изображение до определенного размера ландшафта, обрезая его из середины, и я, кажется, делаю что-то не так.Прямо сейчас у меня есть следующий код:
// Check the orientation
if(original.Height > original.Width) {
var bmp = new Bitmap(original);
int cropHeightOffset = (desiredHeight - original.Height) / 2;
var totalArea = new Rectangle(new Point(0, 0),
new Size(original.Width, original.Height));
var cropArea = new Rectangle(new Point(0, cropHeightOffset),
new Size(desiredWidth, desiredHeight));
// Create new blank image of the desired size
var newBmp = new Bitmap(bmp, new Size(desiredWidth, desiredHeight));
// Crop image
var cropper = Graphics.FromImage(newBmp);
// Draw it
cropper.DrawImage(bmp, totalArea, cropArea, GraphicsUnit.Pixel);
// Save
original.Dispose();
newBmp.Save(imagePath, ImageFormat.Jpeg);
}
Когда это происходит, оно существенно изменяет размер изображения (таким образом искажая его) вместо того, чтобы обрезать его.
Если я переключу totalArea
и cropArea
в моем вызове cropper.DrawImage
, то он обрезается снизу, но изображение повторяется дважды (но все равно правильный размер).
Я совершенно не понимаю, как это сделать правильно.
Редактировать: Вот несколько примеров того, что я пробовал.Есть кое-что, чего я не получаю, я просто не уверен, что.
Используя код Оливера:
var targetArea = new Rectangle(new Point(0, 0), new Size(desiredWidth, desiredHeight));
var cropArea = new Rectangle(new Point(0, cropHeightOffset), new Size(desiredWidth, desiredHeight));
...
// Draw it
cropper.DrawImage(bmp, targetArea, cropArea, GraphicsUnit.Pixel);
дает мне http://dl.dropbox.com/u/6753359/crop/7278482-2.jpeg
var targetArea = new Rectangle(new Point(0, 0), new Size(desiredWidth, desiredHeight));
var cropArea = new Rectangle(new Point(0, cropHeightOffset), new Size(original.Width, original.Height));
......
// Draw it
cropper.DrawImage(bmp, cropArea, targetArea, GraphicsUnit.Pixel);
даетЯ http://dl.dropbox.com/u/6753359/crop/7278482-1.jpeg
Исходное изображение: http://dl.dropbox.com/u/6753359/crop/7278482%20orig.jpeg