Так что мне нужно немного изменить размер.
Я нашел два разных метода.
Один выглядит так:
public static Byte[] ResizeImageNew(System.Drawing.Image imageFile, int targetWidth, int targetHeight) {
using(imageFile){
Size newSize = CalculateDimensions(imageFile.Size, targetWidth, targetHeight);
using (Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format32bppRgb)) {
newImage.SetResolution(imageFile.HorizontalResolution, imageFile.VerticalResolution);
using (Graphics canvas = Graphics.FromImage(newImage)) {
canvas.SmoothingMode = SmoothingMode.AntiAlias;
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;
canvas.DrawImage(imageFile, new Rectangle(new Point(0, 0), newSize));
MemoryStream m = new MemoryStream();
newImage.Save(m, ImageFormat.Jpeg);
return m.GetBuffer();
}
}
}
}
И другой:
public static System.Drawing.Image ResizeImage(System.Drawing.Image originalImage, int width, int maxHeight) {
originalImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
originalImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
int NewHeight = originalImage.Height * width / originalImage.Width;
if (NewHeight > maxHeight) {
// Resize with height instead
width = originalImage.Width * maxHeight / originalImage.Height;
NewHeight = maxHeight;
}
System.Drawing.Image newImage = originalImage.GetThumbnailImage(width, NewHeight, null, IntPtr.Zero);
return newImage;
}
Я в основном «позаимствовал» оба метода и просто изменил их по кусочкам.
Однако - используя первый, всякий раз, когда я изменяю размер изображения до небольшого размера, размер файлана самом деле больше, чем оригинал (!?)
А второй при значительном улучшении размера выглядит ужасно: /
Я, конечно, полагаюсь просто на улучшение качества изображения в первом методе, есливозможно, но я не понимаю, как, с моей точки зрения, все выглядит «качественно»?