Область из непрозрачных пикселей в C#

Пример Создание профилей PictureBoxes в C# устанавливает Region из двух элементов управления PictureBox для круговых областей. Это хорошо работает в этом примере, где изображения представляют собой круглые волейболы с прозрачным фоном, но было бы сложно вручную создать области, представляющие более нерегулярные области, такие как те, которые используются в этом примере.

В этом примере используется следующий метод автоматического создания 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. Затем он перебирает каждую строку в растровом изображении. Он сканирует каждую строку, строящую горизонтальные полосы непрозрачных пикселей, и добавляет прямоугольник в область, представляющую каждую полосу.

Источник: http://csharphelper.com/blog/2016/09/make-a-region-from-non-transparent-pixels-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector