.NET 4.x Вырезать в отдельный файл области красного цвета(изображение) - C#
Формулировка задачи:
Есть изображение
Из него требуется получить большие скопления красного цвета. Проше говоря находим скопление, выделяем его по краям вырезаем эту часть и сохраняем.
Скопления могу быть на одном уровне по Y или по X.
А вот как определить место нахождение этих областей ?
Собственно вот функция вырезания и сохранения
// Первым параметром передаём исходное изображение // Вторым и третим координаты верхнего левого угла вырезаемой части // Два последующих параметра ширина и высота вырезаемой части private void CutAndSave(Bitmap image, int x, int y, int width, int height) { Rectangle rect = new Rectangle(x, y, width, height); var ret = new Bitmap(rect.Width, rect.Height); using (var g = Graphics.FromImage(ret)) g.DrawImage(image, 0, 0, rect, GraphicsUnit.Pixel); ret.Save("save.png"); }
Решение задачи: «.NET 4.x Вырезать в отдельный файл области красного цвета(изображение)»
textual
Листинг программы
const int max_padding = 32; public Bitmap ClearBitmap(Bitmap src) { var mask = SearchRegions(src); List<Rectangle> regions = new List<Rectangle>(); Point topLeft = new Point(mask.Width, mask.Height), downRight = new Point(0, 0); int last_paddingY = 0; for (int y = 0; y < mask.Height; y++) { for (int x = 0; x < mask.Width; x++) { if (mask.GetPixel(x, y).R == 255) { if (y - last_paddingY <= max_padding || topLeft.Y == mask.Height) { if (topLeft.Y == mask.Height) { topLeft.Y = y; } if (topLeft.X > x) { topLeft.X = x; } if (downRight.X < x) { downRight.X = x; } last_paddingY = y; } else { downRight.Y = last_paddingY; regions.Add(new Rectangle(topLeft.X, topLeft.Y, downRight.X - topLeft.X + 1, downRight.Y - topLeft.Y + 1)); topLeft = new Point(mask.Width, mask.Height); downRight = new Point(0, 0); } } } } List<Bitmap> bitmaps = new List<Bitmap>(); foreach (Rectangle region in regions) CutAndSave(src, region); return mask; } private void CutAndSave(Bitmap src, Rectangle rect) { DateTime a = DateTime.Now; src.Clone(rect, PixelFormat.Format32bppArgb).Save(a.Millisecond + ".jpg"); Thread.Sleep(1); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д