Я написал метод обрезки изображений в C #. Это делается путем создания нового растрового изображения и рисования на нем указанного прямоугольника (области, которую нужно обрезать) из исходного изображения.
Для изображений, которые я пробовал, это дало неправильные результаты. Размер полученного изображения был правильным, но содержание было им. Это было как если бы изображение было увеличено на 2, а затем обрезано. В конце концов добавление этой строки исправило это:
result.setResolution(72, 72)
Но зачем мне разрешение? Я просто работаю с пикселями, а не с дюймами или сантиметрами. Кроме того, какое тогда будет правильное разрешение?
Полный код этого метода расширения:
public static Bitmap Crop(this Image image, int x, int y, int width, int height) {
Bitmap result = new Bitmap(width, height);
result.SetResolution(72, 72);
// Use a graphics object to draw the resized image into the bitmap.
using (Graphics graphics = Graphics.FromImage(result)) {
// High quality.
graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
// Draw the image into the target bitmap.
graphics.DrawImage(image, 0, 0, new Rectangle(x, y, width, height), GraphicsUnit.Pixel);
}
return result;
}