/// <summary> /// Изменяет размеры исходного изображения без потерь качества. /// </summary> /// <param name="sourceImage">Исходное изображение.</param> /// <param name="width">Новая ширина.</param> /// <param name="height">Новая высота.</param> /// <param name="algorithm">Алгоритм изменения размера.</param> /// <returns></returns> public static Bitmap Resize(this Bitmap sourceImage, int width, int height, AntialiasingMethod algorithm) { BitmapData sourceData = sourceImage.LockBits(new Rectangle(0, 0, sourceImage.Width, sourceImage.Height), ImageLockMode.ReadOnly, sourceImage.PixelFormat); try { return(Resize(sourceData, width, height, algorithm)); } finally { sourceImage.UnlockBits(sourceData); } }
/// <summary> /// Изменяет размеры исходного изображения без потерь качества. /// </summary> /// <param name="sourceImage">Исходное изображение.</param> /// <param name="newSize">Новые размеры.</param> /// <param name="algorithm">Алгоритм изменения размера.</param> /// <returns></returns> public static Bitmap Resize(this Bitmap sourceImage, Size newSize, AntialiasingMethod algorithm) => Resize(sourceImage, newSize.Width, newSize.Height, algorithm);
/// <summary> /// Изменяет размеры исходного изображения без потерь качества. /// </summary> /// <param name="sourceData">Исходное изображение.</param> /// <param name="width">Новая ширина.</param> /// <param name="height">Новая высота.</param> /// <param name="algorithm">Алгоритм изменения размера.</param> /// <returns></returns> public static Bitmap Resize(this BitmapData sourceData, int width, int height, AntialiasingMethod algorithm) { Bitmap destinationImage = sourceData.PixelFormat == PixelFormat.Format8bppIndexed ? UnmanagedBitmap.CreateGrayscaleImage(width, height) : new Bitmap(width, height, sourceData.PixelFormat); BitmapData destinationData = destinationImage.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, sourceData.PixelFormat); try { using (UnmanagedBitmap unmSource = new UnmanagedBitmap(sourceData)) using (UnmanagedBitmap unmDestination = new UnmanagedBitmap(destinationData)) AntialiasingFilter.Process(unmSource, unmDestination, width, height, algorithm); } finally { destinationImage.UnlockBits(destinationData); } destinationImage.SetResolution(300, 300); return(destinationImage); }
/// <summary> /// Обрабатывает изображение указанным алгоритмом. /// </summary> /// <param name="sourceData">Исходное изображение.</param> /// <param name="destinationData">Изображение назначения.</param> /// <param name="newWidth">Новая ширина.</param> /// <param name="newHeight">новая высота.</param> /// <param name="algorithm">Алгоритм изменения размеров.</param> public static void Process(UnmanagedBitmap sourceData, UnmanagedBitmap destinationData, int newWidth, int newHeight, AntialiasingMethod algorithm) { switch (algorithm) { default: case AntialiasingMethod.NearestNeighbor: NearestNeighbor(sourceData, destinationData, newWidth, newHeight); break; case AntialiasingMethod.Bilinear: Bilinear(sourceData, destinationData, newWidth, newHeight); break; case AntialiasingMethod.Bicubic: Bicubic(sourceData, destinationData, newWidth, newHeight); break; } }