Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 05.09.2012
Сообщений: 46

Затравочное заполнение четырехсвязной гранично определенной области

16.10.2012, 03:51. Показов 2711. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
я реализую алгоритм Затравочное заполнение 4-х связной гранично определенной области. Алгоритм такой использовал: ставим затравочную точку и проверяем ее четыре соседние точки, если точка не является закрашенной или граничной, то добавляем ее в стек.

реализовывал алгоритм вот с этого источника http://edu.nstu.ru/education/e... c/kg/2.htm

Вот код функции которую я написал,при включении прога зависает и ничего не отображает,может быть я что-то напутал со стеком.И ещё вопрос setpixel устанавливает цвет пиксела насколько я понял,а она отображает ли его на экране? У меня должна заполниться вся внутренняя часть квадрата черным цветом,не включая рамку(сам контур квадрата).

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public void Zatravka()
        {
 
            Graphics g = Graphics.FromHwnd(Handle);
            int x = width;
            int y = height;
            Point pt1 = new Point(x, y);
            Stack<Point> stack = new Stack<Point>(9);
            stack.Push(pt1);
            g.DrawRectangle(new Pen(Color.Red, 1), new Rectangle(x - 100, y - 100, 200, 200));
            Bitmap my = new Bitmap(600, 600, g);
            while (stack.Count() != 0)
            {
                stack.Pop();
 
                if (my.GetPixel(pt1.X, pt1.Y) != Color.Black)
                {
                    my.SetPixel(pt1.X, pt1.Y, Color.Black);
                }
 
 
                if ((my.GetPixel(x + 1, y) != Color.Red) && (my.GetPixel(x + 1, y) != Color.Black))
                {
                    pt1.X = x + 1;
                    pt1.Y = y;
                    stack.Push(pt1);
                }
 
                if ((my.GetPixel(x, y + 1) != Color.Red) && (my.GetPixel(x, y + 1) != Color.Black))
                {
                    pt1.X = x;
                    pt1.Y = y + 1;
                    stack.Push(pt1);
                }
 
                if ((my.GetPixel(x - 1, y) != Color.Red) && (my.GetPixel(x - 1, y) != Color.Black))
                {
                    pt1.X = x - 1;
                    pt1.Y = y;
                    stack.Push(pt1);
                }
 
                if ((my.GetPixel(x, y - 1) != Color.Red) && (my.GetPixel(x, y - 1) != Color.Black))
                {
                    pt1.X = x;
                    pt1.Y = y - 1;
                    stack.Push(pt1);
                }
            }
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.10.2012, 03:51
Ответы с готовыми решениями:

Выделение определенной области
Объясните как будет выглядеть условие того, что мы хотим выделить область, закрашенную зеленым цветом. Нужен не столько готовый ответ,...

Блокировка определенной области в П.О
Всем привет! Нужна ваша помощь с решением 1-й проблемы) Проблема вот в чем, как в паскале сделать блокировку опр. координат на экране в...

Очистка экрана в определенной области
есть ли такая ф-я, которая очищает экран в определенной области? например, очистить с 3 строки 4 колонки по 5й строки 6 колонки.

3
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
16.10.2012, 08:30
Для примера, как надо рисовать на формах: Рисование на форме. Исчезает рисунок
Таких тем на форуме огромное кол-во.

В реализацию алгоритма не вникал, но
Цитата Сообщение от sokolas Посмотреть сообщение
Bitmap(600, 600, g)
циклический обход массива подобных размеров будет нагружать процессор на полную и зависать на отрисовке.
0
1 / 1 / 0
Регистрация: 05.09.2012
Сообщений: 46
16.10.2012, 12:24  [ТС]
Проблема не в массиве 600*600, окно я не трогаю,в статье ничего не нашёл что бы могло помочь,уже проверял,что -то не так со стеком,а что не пойму.Тема актуальна
0
1923 / 428 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
16.10.2012, 12:36
Цитата Сообщение от sokolas Посмотреть сообщение
Проблема не в массиве 600*600, окно я не трогаю,в статье ничего не нашёл что бы могло помочь,уже проверял,что -то не так со стеком,а что не пойму
Проблема в неверном подходе. Выше я озвучил с чего нужно начинать. Если что-то не так со стеком, то почему бы не провести простой эксперимент. Взять маленькую область 5х5 и построить ее вручную на листочке, и с помощью реализованного алгоритма в режиме трасировки проверить корректность
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.10.2012, 12:36
Помогаю со студенческими работами здесь

Применить скрипт к определенной области
Добрый день! Просьба помочь в одной несложной задачке. Есть скрипт: https://jsfiddle.net/ialex26/q51jea2z/2/#&amp;togetherjs=LxDSAdtnAS...

Печать из определенной области textarea
Привет всем! У меня в textarea есть какой либо текст. Как мне распечатать именно его, а не все окно? Ведь если текст не скролается, то на...

Определение координаты в определенной области
Здравствуйте,не могу понять в чем ошибка.Как сделать чтоб нули при введении не входили? #include &lt;iostream.h&gt; #include...

Cкриншот определенной области экрана
У меня есть код который делает скриншот экрана!!! как его переделать таким образом что бы бралось изображение не всего экрана а...

Вывод определенной области формы на печать
Здравствуйте, есть проблема. Создана в Access2003 база даных регистрации кореспонденции: таблица и форма. Требуется вывод на печать через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru