Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
132 / 102 / 43
Регистрация: 01.03.2018
Сообщений: 291
1
Delphi 6-7

Canvas FloodFill

13.06.2019, 18:32. Показов 1702. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!
разбираюсь с тем как работает FloodFill

Хочу закрасить область пересечения графиков

Delphi
1
2
3
4
5
   
 Canvas.Brush.Color := clLime; // заливаем лимонным  цветом
  cl := Canvas.Pixels[x0 + round(1*dx), y0-round(dy*2)]; // получаем цвет пикселя
 // Image1.Canvas.TextOut(x0 + round(1*dx), y0-round(dy*2), '*'); // проверил что точка попала в замкнутую область
  Image1.Canvas.FloodFill(x0 + round(1*dx), y0-round(dy*2), cl, fsSurface); // закрашиваю область которая имеет заданым цвет
Вот что получается.
Миниатюры
Canvas FloodFill  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2019, 18:32
Ответы с готовыми решениями:

Floodfill
Подскажите что делать. Я ввожу paintBox1.Canvas.FloodFill(_x,_y,colordialog1.Color); и выдаёт...

Не работает floodfill
При его поялвении в коде , весь рисунок исчезает. А мне нужно закрасить один кусок. procedure...

FloodFill - криво заливает
Всем привет. В общем, задача состоит в том, чтобы при нажатии на кнопку рисовались координатные...

Закраска с помощью FloodFill на TImage
Расположил на форме TImage, строю на нём фигуру по точкам, пытаюсь закрасить фигуру командой...

6
412 / 141 / 27
Регистрация: 04.08.2018
Сообщений: 600
13.06.2019, 20:03 2
Цитата Сообщение от Young Vu Посмотреть сообщение
cl := Canvas.Pixels[x0 + round(1*dx), y0-round(dy*2)]; // получаем цвет пикселя
Вы получаете цвет с канвы формы, а не элемента Image1. Надо
Delphi
1
cl := Image1.Canvas.Pixels[x0 + round(1*dx), y0-round(dy*2)];
Добавлено через 54 секунды
А ещё лучше с with Image1 do
1
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
13.06.2019, 20:08 3
Нужно чтобы область была замкнутой, линии одного цвета.
В каждой области, например здесь справа от разрыва их 3, написать
Delphi
1
2
brush.Color:=clLime;//цвет заливки
floodfill(75,75,clRed,fsBorder);//clRed цвет линий, лучше их тоже сделать Lime.
1
Модератор
3750 / 2250 / 782
Регистрация: 15.11.2015
Сообщений: 8,960
13.06.2019, 20:44 4
Цитата Сообщение от Young Vu Посмотреть сообщение
Image1.Canvas.FloodFill(x0 + round(1*dx), y0-round(dy*2), cl, fsSurface);
Если фон точно белый, то можно написать просто:
Delphi
1
Image1.Canvas.FloodFill(x0 + round(1*dx), y0-round(dy*2), clWhite, fsSurface);
Добавлено через 4 минуты
Нормально заливает:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button1Click(Sender: TObject);
begin
  with Image1.Picture.Bitmap do begin
    Canvas.Brush.Color := clWhite;
    Width  := 200;
    Height := 200;
    Canvas.Brush.Color := clYellow;
    Canvas.Ellipse( 10,  10, 190, 190);
    Canvas.Pen.Color := clBlue;
    Canvas.MoveTo(  0, 50);
    Canvas.LineTo(200, 100);
    Canvas.Brush.Color := clLime;
    Canvas.FloodFill(100,  50, clYellow, fsSurface);
  end;
end;
1
132 / 102 / 43
Регистрация: 01.03.2018
Сообщений: 291
14.06.2019, 15:13  [ТС] 5
Очень похоже на то, что область не замкнута.
Потому что я сделал цвет у всех графиков красным - не заливает.

пробовал вот так

Если фон точно белый, то можно написать просто:

Image1.Canvas.FloodFill(x0 + round(1*dx), y0-round(dy*2), clWhite, fsSurface);
вот так я рисую графики
Delphi
1
2
3
4
5
6
7
  x:= -2;
   Image1.Canvas.MoveTo(x0 + round(dx*x), y0 - round(dy*sin(x) );
  while x<= 10 do
  begin
    Image1.Canvas.LineTo(x0 + round(dx*x), y0 - round(dy*sin(x) );
    x:= x+ 0.001;
  end;
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
14.06.2019, 15:16 6
Цитата Сообщение от Young Vu Посмотреть сообщение
Очень похоже на то, что область не замкнута.
Так Вы не видите что-ли замкнута или нет?
Вот на скрине видно что только 2 области замкнуты.
1
132 / 102 / 43
Регистрация: 01.03.2018
Сообщений: 291
14.06.2019, 15:22  [ТС] 7
а все разобрался...
вместо Image1 менял цвет кисти у формы
0
14.06.2019, 15:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.06.2019, 15:22
Помогаю со студенческими работами здесь

Проблемы с заливкой через FloodFill
Необходимо залить прямоугольник и еще несколько фигур, которые строятся по координатам, которые в...

Можно ли одной процедурой рисовать на Image.Canvas и Printer.Canvas
Здравствуйте, пожалуйста, подскажите можно ли одной процедурой рисовать на Image.Canvas и...

Как добиться одинакового размера шрифта при выводе на Image.Canvas и Printer.Canvas
Здравствуйте! Подскажите, пожалуйста, как добиться одинакового размера шрифта при выводе на...

MetaFile и FloodFill
Добрый день уважаемый форумчане. Созрел еще один вопрос. Я рисую TMetaFileCanvas сохраняю в файл...

FloodFill не работает функция
Не работает функция FloodFill Первые два параметр это точка которая расположена внутри полигона....

построить функцию y=kx+b (линейная функция) с помощью Vcart или canvas (form.canvas)
Надо построить функцию y=kx+b (линейная функция) с помощью Vcart или canvas (form.canvas)


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru