Я использую следующий код для изменения размера изображения с сохранением соотношения сторон
public Bitmap resizeImage(System.Drawing.Image imgToResize, SizeF size)
{
int sourceWidth = imgToResize.Width;
int sourceHeight = imgToResize.Height;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
nPercentW = ((float)size.Width / (float)sourceWidth);
nPercentH = ((float)size.Height / (float)sourceHeight);
if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Bitmap b = new Bitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage((System.Drawing.Image)b);
// Used to Prevent White Line Border
// g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();
return b;
}
Но изображения с большой шириной сжимаются, и содержимое кажется упакованным в маленькое пространство. Чего я пытаюсь добиться, так это: Изменение размера изображения большого размера / большого разрешения, потому что обработка этого займет огромное время , Поэтому, когда ширина или высота изображения превышает, скажем, 1000, я хочу изменить размер изображения до меньшего размера, например: 1000 Ширина или Высота, которая когда-либо будет больше, чтобы я мог сэкономить время вычислений. Но кажется, что приведенный выше код принудительно пытается поместите изображение в поле 1000X1000, когда я сделаю
if (y.Width > 1000 || y.Height > 1000)
{
y = new Bitmap( resizeImage(y, new Size(1000, 1000)));
}