Область из непрозрачных пикселей в C#
Пример
В этом примере используется следующий метод автоматического создания Region, представляющий непрозрачные пиксели в растровом изображении.
// Создаем область, представляющую // непрозрачные пиксели изображения. public static Region MakeNonTransparentRegion(Bitmap bm) { if (bm == null) return null; // Создаем область результата. Region result = new Region(); result.MakeEmpty(); Rectangle rect = new Rectangle(0, 0, 1, 1); bool in_image = false; for (int y = 0; y < bm.Height; y++) { for (int x = 0; x < bm.Width; x++) { if (!in_image) { // Мы не находимся сейчас в непрозрачных пикселях. if (bm.GetPixel(x, y).A != 0) { // Мы только начали с непрозрачных пикселей. // Начните прямоугольник для их представления. in_image = true; rect.X = x; rect.Y = y; rect.Height = 1; } } else if (bm.GetPixel(x, y).A == 0) { // Мы находимся в непрозрачных пикселях и // нашли прозрачный. // Добавим прямоугольник до области. in_image = false; rect.Width = (x - rect.X); result.Union(rect); } } // При необходимости добавим последний кусок прямоугольника. if (in_image) { in_image = false; rect.Width = (bm.Width - rect.X); result.Union(rect); } } return result; }
Этот метод сначала создает пустую область Region. Затем он перебирает каждую строку в растровом изображении. Он сканирует каждую строку, строящую горизонтальные полосы непрозрачных пикселей, и добавляет прямоугольник в область, представляющую каждую полосу.