Как я могу обрезать изображение без изменения его разрешения в С#.Net?

Я сделал небольшую программу, чтобы разделить большие изображения и взять их части. Когда я импортирую изображение, созданное «Microsoft Paint», это изображение имеет разрешение «96 dpi», поэтому моя программа работает хорошо.

Но у меня есть изображения, сделанные в Photoshop, их разрешение составляет 71,6 dpi, когда я обрезаю эти изображения, новое обрезанное изображение имеет разрешение 96 dpi, поэтому размер между ними отличается.

Я хочу обрезать изображение, сохранив его разрешение.

.

большое спасибо


person Wahid Bitar    schedule 13.05.2009    source источник
comment
Это вопрос по программированию? Почему вы упомянули C# в заголовке?   -  person Milen    schedule 13.05.2009
comment
Как вы кадрируете в фотошопе?   -  person Milen    schedule 13.05.2009


Ответы (3)


Bitmap.clone позволяет создать обрезанную копию изображения, которую затем можно сохранить. Он не должен менять разрешение или что-то еще (изображение будет выглядеть больше, если вы откроете его в программе, которая увеличивает масштаб, когда изображения меньше). Его нельзя использовать для расширения холста (вы получите ошибки памяти). Итак, просто возьмите Image из файла, приведите к Bitmap (пространство имен system.drawing) и клонируйте его, чтобы он был меньше, а затем сохраните его.

Пример:

using System.Drawing;
//...
Bitmap x = (Bitmap) Image.FromFile(@"c:\tmp\food.png");
Image x2 = x.Clone(new Rectangle(25, 25, 50, 50), x.PixelFormat);
x2.Save(@"c:\tmp\food2.png");
person Brian    schedule 13.05.2009
comment
Вот и все! Большое спасибо. - person Wahid Bitar; 13.05.2009
comment
Оглядываясь назад, Bitmap имеет конструктор public Bitmap(string filename);. Таким образом, приведение Image.FromFile не является строго необходимым. Кроме того, операторы using, вероятно, сделают очистку ресурсов немного лучше. - person Brian; 06.03.2013

DPI (точек на дюйм) — это просто соотношение между размером пикселя и размером носителя. Если у вас есть изображение размером 1024 x 768 пикселей, это будет 1024 x 768. К растровому/двоичному файлу не привязан собственный DPI.

Если вы хотите распечатать это изображение на принтере, который печатает с разрешением 300 dpi, вы можете, например, рассчитать размер на бумаге.

person splattne    schedule 13.05.2009
comment
Подскажите что: что большое (в пикселях), а что маленькое (в пикселях). Если вы не знаете количество пикселей, скажите, какие дюймы и dpi вам понадобятся. Из дюймов и точек на дюйм вы можете рассчитать пиксели. - person splattne; 13.05.2009
comment
Также было бы полезно указать эту информацию в вопросе. - person Lucas Jones; 13.05.2009

Метод SetResolution() класса Bitmap позволяет указать разрешение изображения.

См. http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.setresolution.aspx

person Tarsier    schedule 13.05.2009