Обработка изображения с использованием медианного фильтра - C#
Формулировка задачи:
Приветствую.
Не сочтите за наглость, но может кто нибудь даст рабочий код обработки изображения с использованием медианного фильтра.
Т.е. В событии button_click описание данного . Он должен срабатывать по нажатию кнопки. Загрузку и рисование освоил, а вот это не допойму.
Желательно полный код для особо одаренных.
Решение задачи: «Обработка изображения с использованием медианного фильтра»
textual
Листинг программы
using System; using System.Drawing; using System.Drawing.Imaging; namespace Helpers { public static class BitmapHelper { struct Pixel : IEquatable<Pixel> { // ReSharper disable UnassignedField.Compiler public byte Blue; public byte Green; public byte Red; public bool Equals(Pixel other) { return Red == other.Red && Green == other.Green && Blue == other.Blue; } } public static Color[,] GetPixels(this Bitmap bmp) { return ProcessBitmap(bmp, pixel => Color.FromArgb(pixel.Red, pixel.Green, pixel.Blue)); } public static float[,] GetBrightness(this Bitmap bmp) { return ProcessBitmap(bmp, pixel => Color.FromArgb(pixel.Red, pixel.Green, pixel.Blue).GetBrightness()); } private static unsafe T[,] ProcessBitmap<T>(this Bitmap bitmap, Func<Pixel, T> func) { var lockBits = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, bitmap.PixelFormat); int padding = lockBits.Stride - (bitmap.Width*sizeof (Pixel)); int width = bitmap.Width; int height = bitmap.Height; var result = new T[height, width]; var ptr = (byte*) lockBits.Scan0; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { var pixel = (Pixel*) ptr; result[i, j] = func(*pixel); ptr += sizeof (Pixel); } ptr += padding; } bitmap.UnlockBits(lockBits); return result; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д