У меня есть некоторые изображения, которые имеют более, скажем, 6 000 000 пикселей, и я хочу масштабировать их, чтобы они были где-то около этого значения.
public void downscaleByCalculateInSampleSize(string filePath, string newPath)
{
int reqNumberOfPixels = 6000000;
double inSampleSize = 1;
using (System.Drawing.Image oImage = System.Drawing.Image.FromFile(filePath))
{
int newWidth = oImage.Width;
int newHeight = oImage.Height;
int actualNumberofPixels = oImage.Width * oImage.Height;
if (actualNumberofPixels > reqNumberOfPixels)
{
inSampleSize = Math.Sqrt(actualNumberofPixels / reqNumberOfPixels);
newWidth = Convert.ToInt32(Math.Round((float)oImage.Width / inSampleSize));
newHeight = Convert.ToInt32(Math.Round((float)oImage.Height / inSampleSize));
}
var newImage = new Bitmap(newWidth, newHeight);
Graphics graphics = Graphics.FromImage(newImage);
graphics.DrawImage(oImage, 0, 0, newWidth, newHeight);
newImage.Save(newPath);
}
}
Я попытался уменьшить изображение с разрешением 6367 x 4751 пикселей и разрешением 72 dpi (глубина 24 бита) размером 8,03 МБ. Я изменил размер этого изображения и ожидал, что оно будет гораздо меньше по размеру (ниже 8 МБ), но у меня 17. Масштабированное изображение составляет 2847 x 2125 (96 точек на дюйм с глубиной 32 бита). Почему это происходит? Есть ли способ уменьшить изображение до запрошенного количества пикселей, чтобы результат был намного меньше? Меня не волнует разрешение...
jpeg
, а выводbmp
? - person Stefan   schedule 06.11.2017newImage.Save(newPath, ImageFormat.Jpeg);
? - person Stefan   schedule 06.11.2017